疑問 アクセス修飾子


下に行くほど制限がゆるい。

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; アクセス不可
	} 
}