3 votes

Java Multilevel Inheritance - Variable d'instance protégée dans une classe de niveau 1

J'ai une question qui relève de l'héritage multi-niveaux en Java. Les trois classes sont dans le même paquet

J'ai la classe A :

public class A {
   protected int x;
}

public class B extends A {
   public void doSomething {
      // x is visible.agreed, as it is a direct subclass of A
   }  
}

public class C extends B {
   public void doSomething {
      // x is still visible, how come? I mean it is at the 2nd level 
     //  I am confused why?
   }  
}

est-ce que ça a une signification ? ou c'est un comportement que nous devons prendre par défaut ?

5voto

PermGenError Points 26936

Les variables/méthodes marquées par protected sont visibles pour toutes les classes du même paquetage et seulement pour les sous-classes de paquets différents. Voici des exemples de cas.

package a;
class A{
protected int x;
}
class B extends A{
//x can be accessed from this class
} 

class C extends B {
//x can be accessed from this class
}
class D{
//x can be accesed this class but you will have to create A's instance 
}

package B 
class One {
//cannot access x from this class
}
class Two extends A {
//can access x from this class
}

5voto

Ted Hopp Points 122617

Les modificateurs de niveau d'accès en Java sont :

  • public - visible par tous les codes
  • protected - visible par tout le code du même paquet et par les sous-classes, quel que soit le paquet.
  • rien (par défaut) - visible pour tout le code dans le même package
  • private - visible uniquement pour le code de la même classe (y compris les classes imbriquées)

Voir, par exemple, le tutoriel Java Contrôle de l'accès aux membres d'une classe ou (pour de nombreux détails techniques) section 6.6 de la spécification du langage Java .

5voto

Amir Afghani Points 17519

Définition du mot-clé

Protégé

Le modificateur protégé spécifie que le membre ne peut être accédé que par à l'intérieur de son propre paquet (comme avec package-private) et, en outre, par une sous-classe de sa classe dans un autre paquetage.

Je vous suggère de lire este .

4voto

Eric Points 28561

Le Java protected Le mot clé descend jusqu'à tous (et membres du paquet ). Si il y avait un protected membre en Object n'importe quel objet peut y accéder. En revanche, private n'est visible que par la classe locale (et les classes internes), et public est accessible à tous.

Jetez un coup d'œil à ce glossaire qui montre en détail comment protected sont hérités, et les membres et méthodes de l Documentation Java sur l'héritage .

3voto

Tomasz Nurkiewicz Points 140462

Vous ne pouvez pas restreindre l'accès aux membres dans les sous-classes. Cette règle s'applique aux méthodes (vous ne pouvez pas surcharger les membres de la classe). public et le rendre private ) mais vous pouvez voir l'analogie ici. Si le champ est protected il sera protected dans chaque sous-classe, quelle que soit sa profondeur. Bien sûr, vous ne pouvez pas remplacer les champs en Java, mais je vous donne un aperçu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X