2010-07-30 6 views

Répondre

14

Oui, mais ils ne sont pas accessibles, regarder si à ce que vous pouvez honnêtement dire qu'ils ne sont pas hérités. Mais oui, ils sont vraiment

4

Cela dépend de la langue, mais en général, pas - ils sont accessibles uniquement dans la classe où ils sont définis.

+0

Mais ils font généralement partie de l'instance (même si la langue empêche l'accès). –

11

Ils sont hérités, mais le mot-clé « privée » signifie que seule la classe dans laquelle ils ont été déclarés peuvent y avoir accès. Ceci exclut les sous-classes. Cependant, comme une instance d'une sous-classe contient sa propre super-classe, elle est toujours présente. Vous ne pouvez pas les voir directement.

Si sont à la recherche d'un champ que seule la classe déclarant et ses sous-classes peuvent voir, vous pouvez utiliser le mot-clé « protégée » au lieu de « privé », et qui devrait fournir la fonctionnalité que vous recherchez.

3

Ils sont, mais ils ne sont pas directement accessibles.

public class BaseClass 
{ 
    private const int _aNumber = 5; 
    public int ReturnANumber() { return _aNumber; } 
} 

public class DClass : BaseClass 
{ 
    public void SomeMethod() 
    { 
     // This is indirectly accessing a private implemented in the class 
     // this derives from, but existing inside this class. 
     int numbery = this.ReturnANumber(); 
    } 
} 

public class Whatever 
{ 
    public void AMethod(DClass someDClass) 
    { 
     int thisIsNumberFive = someDClass.ReturnANumber(); 
    } 
} 
7

Ils sont hérités dans un sens. L'espace mémoire leur est alloué et ils "existent" dans l'instance de la sous-classe. Cependant, la sous-classe ne peut pas accéder à la variable elle-même. (Si vous voulez que la sous-classe pour accéder à la variable de classe de base, utilisez protected au lieu de private.)

Ceci est nécessaire - les méthodes au sein de la classe de base doivent être en mesure de définir la variable privée (ou il n'y aurait pas d'utilisation pour ça). Ces méthodes sont disponibles sur une instance de la sous-classe aussi bien - et en fait, l'instance de la sous-classe doivent pouvoir être traités comme une instance de la classe de base (nécessaire pour satisfaire la Liskov substitution principle). Si les variables privées n'étaient pas héritées, le comportement des méthodes de la classe de base changerait ou se casserait.

3

Oui, ils sont hérités mais le compilateur interdit d'y accéder. Aalas, vous pouvez toujours les obtenir - pas recommandé - par la réflexion ou par votre joli tour AMethod().

3

Ils sont hérités mais pas accessibles ou ils ne sont accessibles que dans la classe où ils sont déclarés. Vous pouvez y accéder en sous classe de deux manières

  1. DÉCLARE les protéger plutôt que privé
  2. écrire une méthode publique qui renvoie la valeur de cette variable privée

    mais il n'y a aucun moyen que vous directement accéder à la variable privée dans la sous-classe.

Questions connexes