Question

Pourquoi est-ce que Java, une superclasse membres protégés sont inaccessibles par une sous-classe indirecte dans un package différent? Je sais qu'une sous-classe directe dans un package différent peut accéder aux superclasse membres protégés. Je pensais que toute sous-classe peut accéder à ses membres protégés hérités.

EDIT

Désolé erreur novice, peut accéder aux sous-classes membres protégés d'une superclasses indirecte.

Était-ce utile?

La solution

Peut-être que vous êtes un peu confus.

Voici ma démo rapide et montre une sous-classe indirecte d'accéder à un attribut protégé:

// A.java
package a;
public class A {
    protected int a;
}

// B.java 
package b;   //<-- intermediate subclass
import a.A;
public class B extends A {
}

// C.java
package c; //<-- different package 
import b.B;
public class C extends B  { // <-- C is an indirect sub class of A 
    void testIt(){
        a++;
        System.out.println( this.a );//<-- Inherited from class A
    }
    public static void main( String [] args ) {
        C c = new C();
        c.testIt();
    }
}

il imprime 1

Comme vous le voyez, l'a d'attribut est accessible à partir de la sous-classe C.

Si vous nous montrez le code que vous essayez nous pouvons savoir où votre confusion est.

Autres conseils

Peut-être que le problème est qu'il essaye d'accéder au champ de protection d'autres cas, mais pas le sien. comme par exemple:

package a;
public class A{
    protected int a;
}

package b;
public class B extends A{

}

package c;
public class C extends B{
    public void accessField(){
        A ancient = new A();
        ancient.a = 2;  //That wouldn't work.

        a = 2;   //That works.
    }


}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top