次のコードがあります
package com.kathy.accessmodifiers2;
public class base extends Object{
protected int a = 10;
}
package com.kathy.accessmodifiers;
import com.kathy.accessmodifiers2.*;
class derived extends base {
public void D() {
System.out.println("D");
base b = new base();
System.out.println(super.a); //line 1
//System.out.println(b.a); //line 2
//Only this class can access the proctected member.
System.out.println(this.a);
System.out.println(a);
}
}
class derived2 extends derived {
public void D2() {
System.out.println(a);
}
}
public class Protected {
public static void main(String str[]) {
new derived2().D();
}
}
行1では、使用しており、出力は10です。行2の場合、基本クラス(別のパッケージ)からクラス(別のパッケージ)のメンバーsuper.a
にアクセスしようとしているため、コードはコンパイルされません。アクセス可能の場合はなぜですか?protected
super
super
a