Zrozumienie chronionego modyfikatora java
Mam klasę o nazwie A w pakiecie1 i inną klasę o nazwie C w pakiecie2. Klasa C rozszerza klasę A.
A ma zmienną instancji zadeklarowaną w ten sposób:
protected int protectedInt = 1;
Oto kod klasy A
package package1;
public class A {
public int publicInt = 1;
private int privateInt = 1;
int defaultInt = 1;
protected int protectedInt = 1;
}
A oto kod klasy 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 podkreśla ostatnią linię w C.go () i mówi, że „A.protectedInt” nie jest widoczny. Wydaje się, że jest to sprzeczne z definicją słowa kluczowego „protected” podaną w dokumentacji Oracle.
Chroniony modyfikator określa, że dostęp do elementu można uzyskać tylko w jego własnym pakiecie (tak jak w przypadku pakietu-private), a dodatkowo przez podklasę jego klasy w innym pakiecie.
Co tu się dzieje?