Privée membres de l'héritage en Java
M'a dit que pour une sous-classe Java il peut hériter de tous les membres de sa super-classe. Donc, est-ce à dire, même privée de ses membres? Je sais qu'il peut hériter des membres protégés.
Quelqu'un peut-il m'expliquer cela. Je suis maintenant totalement confus.
OriginalL'auteur Mandy M | 2011-07-01
Vous devez vous connecter pour publier un commentaire.
Non, le membre privé sont pas hérité parce que la portée d'un membre privé est seulement limitée à la classe dans laquelle elle est définie. Seul le public et les membres protégés sont héritées.
De la
Documentation de Java
,De la
JLS
,Un lien utile : Ne les sous-classes héritent des champs privés?
OriginalL'auteur sgokhales
Ce genre d'dépend de votre usage de la parole à l'héritage. Je vais vous expliquer, par exemple.
Supposons que vous avez deux classes:
Parent
etChild
, oùChild
s'étendParent
. Aussi,Parent
a un entier nommévalue
.Maintenant vient la question: est-ce
Child
hériter du privévalue
? En Java, l'héritage est défini de telle manière que la réponse serait "Non". En général, toutefois, le jargon de la programmation orientée objet, il y a une légère ambiguïté.On pourrait dire que c' pas hérité, parce que nulle part peut
Child
explicitement référence àvalue
. I. e. tout code commethis.value
ne peut pas être utilisé dans lesChild
, niobj.value
être utilisé à partir de certains code appelant (évidemment).Cependant, dans un autre sens, on pourrait dire que
value
est hérité. Si vous considérez que chaque instance deChild
est aussi une instance deParent
, alors que l'objet doit contenirvalue
tel que défini dansParent
. Même si leChild
classe ne sait rien à ce sujet, un membre privé nommévalue
existe encore au sein de chaque instance deChild
. Donc, dans ce sens, on pourrait dire quevalue
est héritée dansChild
.Donc sans utiliser le mot "héritage", rappelez-vous que les enfants des classes ne sais pas privé les membres définis à l'intérieur des classes parentes. Mais rappelez-vous aussi que les membres continuent d'exister dans les instances de la classe enfant.
OriginalL'auteur Ken Wayne VanderLinde
L'OMI, en aucune façon, est-ce une question de définition. Dans la classe de base de l'Héritage implique la propagation de comportement à la descendance. Que ces membres N'avoir hérité , et je n'entrerai pas dans les détails comment cela se passe.
En réalité, je trouve le "pas hérité de" la réponse à être dangereux pour les nouveaux développeurs et ils ne comprennent pas tout de suite que les membres privés sont là, cachés sous la peau de votre classe et ils (peuvent) avoir de graves répercussions sur son comportement, la taille des objets etc.
Il est fréquent que le "développement" vient avant "compréhension" en informatique, permet cependant d'éviter la création (ou la destruction) de notre conceptualisation de la programmation orientée objet en supposant que le mal "définition" adoptée par certains de technicien de l'écrit le manuel de l'un bien connu de la classe de base OO plate-forme.
Désolé pour avoir déclaré dans un vieux post, mais le problème est toujours valide.
aujourd'hui, nous avons seulement un idéal de définition.
Donc, si l'on devait comparer les deux solutions qui semblent émerger comme defacto définitions, une voiture, consultez la rubrique suivante: en supposant que celui que les états membres privés ne sont pas héréditaire est complètement trompeur et dangereux pour un nouveau développeur qui pense que la super-classe de membres privés (état et le comportement des éléments) ont disparu. En tant que tel que l'une des définitions est sûr de supposer. Donc il n'est pas question de "l'autre définition de" qui a été la base de mon message d'origine ("pas question de la définition de"). L'autre définition ne fait aucune hypothèse 😉
OriginalL'auteur gkakas
Si https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.2 montre que les Membres Privés ne sont pas héritées. En fait, il est hérité par la sous-classe. Lorsque nous utilisons des débogueurs à la trace des variables, il montrera les membres privés sous l'étiquette de "hérité", donc il suffit de l'essayer. il y a un autre post de la discussion de cette question, et la plupart d'entre eux ne pense pas hérité, ce qui induit en erreur beaucoup de gens, moi y compris au premier abord.
OriginalL'auteur longe
Vous serez satisfait ici 100%. Je l'ai testé sur mon ordinateur et que j'en ai conclu que je vais le poster ici. Il suffit d'aller dans le programme ci-dessous, voir le programme de la sortie et de LIRE LA CONCLUSION de l'donnés à la fin.
Pour tester vous-même, copier l'ensemble du programme et l'enregistrer dans un fichier nommé "InheritanceTest.java" puis le compiler et enfin l'exécuter.
Programme
Sortie
Conclusion
Oui, une sous-classe peut accéder indirectement à la privée, les membres de la super-classe. Une sous-classe peut pas directement accéder aux membres privés d'une classe mère.
Tous les publics, privés et protégés membres (c'est à dire tous les champs et méthodes) d'une classe mère sont héritées par une sous-classe, mais la sous-classe peut accéder directement seulement le public et les membres protégés de la classe mère. Si un membre hérité d'une super-classe donne accès à un membre privé de la super-classe, puis à la sous-classe de ce membre hérité d'un accès privé des membres de la super-classe.
OriginalL'auteur Zulfequar Ali