カプセル化
・フィールドに不正な値が入らないように防ぐ
・「矛盾しないクラス」を作る
・「現実世界を忠実に真似る」オブジェクト指向の本質と直結している
フィールド、メソッドに対してアクセス制限を行う
アクセス修飾子(しゅうしょくし)
名称 | 指定方法 | アクセスを許可する範囲 |
---|---|---|
private | private | 自分自身のクラスのみ |
package private | (何も書かない) | 自分と同じパッケージに属するクラス |
protected | protected | 自分と同じパッケージに属するか、自分を継承した子のクラス |
public | public | 全てのクラス |
メンバに関するアクセス修飾子の定石
・フィールドは全てprivate
・メソッドは全てpublic
getterとsetter
・メソッドを経由したフィールドの操作
getter
・「get」+「フィールド名の先頭を大文字にしたもの」
・nameフィールドの中身を呼び出して元に返すだけのメソッド
Hero.java
public class Hero {
private String name;
public String getName() { //getName()を経由してnameフィールドにアクセス
return this.name;
}
}
King.java
public class King {
void talk(Hero h) {
System.out.println("王様:ようこそ我が国へ、勇者" + h.getName() + "よ。");
}
}
setter
・「set」+「フィールド名の先頭を大文字にしたもの」
・値を代入するだけのメソッド(他のクラスで)
Hero.java
public class Hero {
private String name;
public void setName(String name) {
this.name = name; //this.は絶対に忘れないように
}
}
クラスに対するアクセス制御
名称 | 指定方法 | アクセスを許可する範囲 |
---|---|---|
package private | (何も書かない) | 自分と同じパッケージに属するクラス |
public | public | 全てのクラス |
非public(package private)クラスの特徴
・クラス名はソースファイル名と異なってもよい
・1つのソースファイルにクラスを複数宣言してもよい
Hero.java
public class Hero {
}
class HeroSkill {
}
class HeroSinbol {
}
Hero.java
class Character {
}
class Boss {
}