🎯
【Java】クラス解説11・publicなフィールドとprivateなフィールド
publicなフィールドとprivateなフィールド
下記のように、publicなフィールドとprivateなフィールドを比較します。
publicなフィールド
public class Main {
public static void main(String[] args) {
// インスタンスを生成
MyClass obj = new MyClass();
// インスタンスからfieldAフィールドに文字列"fuji"を代入
obj.fieldA = "fuzi";
// インスタンスからfieldAフィールドの値を取得して、標準出力に出力
System.out.println(obj.fieldA); // 出力結果 -> fuzi
}
}
class MyClass {
// publicなフィールド
public String fieldA;
}
MyClassクラスにあるfieldAフィールドはpublicなので、
他クラスであるMainクラスからインスタンスを使ってfieldAフィールドにアクセスしても、ちゃんと実行(=値を代入、値を取得)されます。
publicでstaticなフィールド
public class Main {
public static void main(String[] args) {
// クラス名からfieldBフィールドに文字列"fuji"を代入
MyClass.fieldB = "fuzi";
// クラス名からfieldBフィールドの値を取得して、標準出力に出力
System.out.println(MyClass.fieldB); // 出力結果 -> fuzi
}
}
class MyClass {
// publicでstaticなフィールド
public static String fieldB;
}
MyClassクラスにあるfieldBフィールドはpublicなので、
他クラスであるMainクラスからクラス名を使ってfieldBフィールドにアクセスしても、ちゃんと実行されます。
privateなフィールド
public class Main {
public static void main(String[] args) {
// インスタンスを生成
MyClass obj = new MyClass();
// インスタンスからfieldCフィールドに文字列"fuji"を代入 -> コンパイルエラー
obj.fieldC = "fuzi";
// インスタンスからfieldCフィールドの値を取得して、標準出力に出力 -> コンパイルエラー
System.out.println(obj.fieldC);
}
}
class MyClass {
// privateなフィールド
private String fieldC;
}
MyClassクラスにあるfieldCフィールドはprivateなので、
他クラスであるMainクラスからインスタンスを使ってfieldCフィールドにアクセスしようとすると、コンパイルエラーとなります。
【参考】privateなフィールドを同じクラスから生成した別インスタンスから利用する場合
public class Main {
public static void main(String[] args) {
}
}
class MyClass {
// privateなフィールド
private String fieldD;
// privateなフィールドを同じクラスから生成した別インスタンスから利用する場合
// -> コンパイルエラーは起きないが、標準出力には出力されない
public void methodA(MyClass obj2) {
obj2.fieldD = "fuzi";
System.out.println(obj2.fieldD);
}
}
-
コンパイルエラーが起きない理由
methodA()が同じクラスのprivateなfieldDにアクセスしているためです。 -
標準出力に
fuzi
が出力されない理由
methodA()内のobj2.fieldDは、obj2を通じて他のインスタンスからfieldDにアクセスしようとしますが、fieldDはprivateなので直接アクセスできないため、標準出力に何も出力されないこととなります。
Discussion