У меня есть следующий код
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 я использую super.a
, а вывод равен 10. В случае строки 2 код не компилируется, потому что я пытаюсь получить доступ к protected
члену класса super
(другой пакет) из базового класса (другой пакет). Почему в случае super
доступен a
?
Derived
нет модификатора видимости, и поэтому он использует package-private. Если вы объявите этоpublic Derived extends Base
, все будет в порядке. - person Sambuca   schedule 11.11.2013b
здесь является экземпляром родительского класса. - person Not a bug   schedule 11.11.2013