Java

【Java】privateによるフィールドのアクセス制限はオブジェクト単位ではなくクラス単位

More than 1 year has passed since last update.

Javaの仕様の話。

Javaのドキュメントには、下記のように書いてある。

The private modifier specifies that the member can only be accessed in its own class.

https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

つまり、同じクラスに属する異なるオブジェクトからはアクセスできる。(勘違いしがちな部分)

例1

引数に同じクラスのオブジェクトを受け取ることで、そのprivateフィールドを直接操作することができる。(getter, setterは不要)

public class Foo {
    private int num;

    public void setNumToAnotherFoo(Foo foo, int num) {
        foo.num = num;
    }
}

例2

フィールドに同じクラスのオブジェクトをもつとき、そのprivateフィールドは直接操作することができる。

public class Bar {
    private Bar barField;
    private int num;

    public void setBarFieldNum(int num) {
        barField.num = num;
    }
}

参考文献

  • ケン・アーノルド、ジェームズ・ゴスリン、デビッド・ホームズ(2014)『プログラミング言語Java 第4版』柴田芳樹訳、東京電機大学出版局
    • 2.6.6 アクセス制御のためのメソッド使用