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?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage