Grundlegendes zum geschützten Modifikator von Java
Ich habe eine Klasse mit dem Namen A in Paket1 und eine andere Klasse mit dem Namen C in Paket2. Klasse C erweitert Klasse A.
A hat eine Instanzvariable, die folgendermaßen deklariert ist:
protected int protectedInt = 1;
Hier ist der Code für Klasse A
package package1;
public class A {
public int publicInt = 1;
private int privateInt = 1;
int defaultInt = 1;
protected int protectedInt = 1;
}
Und hier ist der Code für Klasse 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 unterstreicht die letzte Zeile in C.go () und sagt, dass "A.protectedInt" nicht sichtbar ist. Dies steht anscheinend im Widerspruch zur Definition des Schlüsselworts "protected" in der Oracle-Dokumentation.
Der Modifikator protected gibt an, dass auf das Mitglied nur innerhalb seines eigenen Pakets (wie bei package-private) und zusätzlich von einer Unterklasse seiner Klasse in einem anderen Paket zugegriffen werden kann.
Was ist denn hier los?