membres protégés dans un inaccessible superclasse par la sous-classe indirecte en Java
-
26-09-2019 - |
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.
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.
}
}