疑問 アクセス修飾子
下に行くほど制限がゆるい。
private | 同じクラス内からしか呼び出せないが、同じクラスから作られたオブジェクト同士であれば、相互の private メンバーにアクセスできる。 | |
---|---|---|
省略 | 同じパッケージ内からしか呼び出せない。 | |
protected | 同じパッケージか、そのサブクラスからしか呼び出せない。 | |
public | どこからでも呼び出せる。 |
package t_nagata; public class AccessTest { public int publicNum = 0; protected int protectedNum = 0; int normalNum = 0; private int privateNum = 0; } // 同一パッケージ・サブクラス class SubAccessTest extends AccessTest{ public SubAccessTest() { this.publicNum = 1; this.protectedNum = 1; this.normalNum = 1; // this.privateNum = 1; アクセス不可 } } // 同一パッケージ・他クラス class OtherAccessTest{ public OtherAccessTest() { AccessTest test = new AccessTest(); test.publicNum = 2; test.protectedNum = 2; // 同じパッケージだからアクセス可 test.normalNum = 2; // test.privateNum = 2; アクセス不可 } }
package t_nagata2; import t_nagata.AccessTest; // 別パッケージ・サブクラス public class AccessTest2 extends AccessTest { public AccessTest2() { AccessTest test = new AccessTest(); test.publicNum = 3; //test.protectedNum = 3; アクセス不可 //test.normalNum = 3; アクセス不可 //test.privateNum = 3; アクセス不可 } } ↑test.protectedNum = 3; アクセス不可 これはアクセスできるはずでは? // 別パッケージ・他クラス class OtherAccessTest2 { public OtherAccessTest2() { AccessTest test = new AccessTest(); test.publicNum = 4; //test.protectedNum = 4; アクセス不可 //test.normalNum = 4; アクセス不可 //test.privateNum = 4; アクセス不可 } }