Понимание защищенного модификатора Java
У меня есть класс с именем A в package1 и другой класс с именем C в package2. Класс C расширяет класс A.
A имеет переменную экземпляра, которая объявлена так:
protected int protectedInt = 1;
Вот код для класса А
package package1;
public class A {
public int publicInt = 1;
private int privateInt = 1;
int defaultInt = 1;
protected int protectedInt = 1;
}
А вот код для класса C:
package package2;
import package1.A;
public class C extends A{
public void go(){
//remember the import statement
A a = new A();
System.out.println(a.publicInt);
System.out.println(a.protectedInt);
}
}
Eclipse подчеркивает последнюю строку в C.go () и говорит, что «A.protectedInt» не отображается. Похоже, это противоречит определению «защищенного» ключевого слова, приведенному в документации Oracle.
Защищенный модификатор указывает, что доступ к члену возможен только в его собственном пакете (как в случае с package-private) и, кроме того, подклассом его класса в другом пакете.
Что тут происходит?