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?

questionAnswers(6)

yourAnswerToTheQuestion