У меня есть класс под названием A в пакете 1 и еще один класс C в пакете2. Класс C расширяет класс A.
A имеет переменную экземпляра, которая объявляется следующим образом:
protected int protectedInt = 1;
Вот код для класса A
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" не отображается. Похоже, что это противоречит определению ключевого слова "protected", приведенному в документации о oracle.
Защищенный модификатор указывает, что доступ к элементу может быть доступен только в его собственном пакете (как в случае с пакетом-private) и, кроме того, подклассом его класса в другом пакете.
Что здесь происходит?