🎯
【Java】クラス解説16・privateなインスタンス変数
インスタンス変数(フィールド)のアクセスレベルについて
Javaの一般的な設計原則として、インスタンス変数(フィールド)は原則的にprivateにすることが推奨されています。
また、privateなインスタンス変数にアクセスするためには、アクセサ(=セッターとゲッターを指す)を使用することが一般的です。
アクセサについては、下記の記事を参考にしてください。
privateなインスタンス変数のコード例
public class Main {
public static void main(String[] args) {
// インスタンス生成
Subclass sb = new Subclass();
// サブクラスのインスタンスからスーパークラスのセッター(メソッド)を呼び出し
sb.setName("fuzi");
// サブクラスのインスタンスからサブクラスのメソッドを呼び出し
sb.printName(); // 出力結果 -> fuzi
}
}
class MyClass {
// アクセスレベルがprivateなインスタンス変数
private String name;
// アクセサを定義
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
}
class Subclass extends MyClass {
// インスタンスメソッドprintNameを定義
public void printName() {
// スーパークラスのゲッター(メソッド)を呼び出し
System.out.println(getName());
}
}
privateなインスタンス変数のコード例の解説
public class Main {
public static void main(String[] args) {
Subclass sb = new Subclass();
sb.setName("fuzi");
sb.printName(); // 出力結果 -> fuzi
}
}
Mainクラスで、
- サブクラスのインスタンスsbを定義します。
- サブクラスのインスタンスでセッターを呼び出して、実引数として
fuzi
を渡します。 - サブクラスのインスタンスでサブクラスのprintNameメソッドを呼び出します。
class MyClass {
private String name;
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
}
スーパークラスのMyClassを定義して、
- privateなインスタンス変数nameを定義します。
- アクセサのセッターを定義して、仮引数で渡された値
fuji
をインスタンス変数nameに代入します。 - アクセサのゲッターを定義して、戻り値として
fuji
が代入されたインスタンス変数nameを呼び出し元に返します。
class Subclass extends MyClass {
public void printName() {
System.out.println(getName());
}
}
MyClassを継承したSubclassを定義して、
- printNameメソッドを定義します。
-
ゲッターを呼び出して、返り値として
fuji
が代入されたインスタンス変数nameを受け取り、fuzi
を標準出力に出力します。
Discussion