Maison >Java >javaDidacticiel >Les sous-classes Java héritent-elles de champs privés ?

Les sous-classes Java héritent-elles de champs privés ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-11 10:23:12648parcourir

Do Java Subclasses Inherit Private Fields?

Les sous-classes héritent-elles de champs privés : une énigme Java

En Java, le concept d'héritage est souvent simple. Cependant, le sujet des champs privés dans les sous-classes introduit une certaine ambiguïté.

Question :

Les sous-classes héritent-elles des champs privés de leurs classes parentes ?

Réponse initiale :

Basé sur la « méthode POO normale » de l'orientation objet programmation, la réponse serait « Non ». Les champs privés sont généralement inaccessibles aux sous-classes.

Documentation Java :

La spécification du langage Java (JLS) indique que « les membres d'une classe déclarés privés ne sont pas hérités par sous-classes de cette classe. Argument :

Malgré la citation de JLS, certains peuvent affirmer que les champs privés sont hérités par les sous-classes, bien qu'indirectement. Ils affirment que ces champs existent dans les objets de sous-classe et sont accessibles par réflexion ou par d'autres moyens.

Arguments à l'appui de l'intervieweur :

Objet Composition :
    Un objet d'une sous-classe doit logiquement contenir tous les champs hérités de sa classe parent, y compris les champs privés champs.
  • API Reflection :
  • Les champs privés sont accessibles à l'aide de l'API Java Reflection, qui donne aux classes la possibilité d'inspecter et de modifier leurs propres métadonnées et celles des autres métadonnées.
  • Clarification de JLS :

La distinction clé ici est entre l'héritage pour les objets et l'héritage pour classes.

Héritage d'objets :
    Les objets des sous-classes contiennent des instances des champs privés de leur classe parent, même si ces champs sont inaccessibles à la sous-classe.
  • Héritage de classe :
  • Les classes elles-mêmes n'héritent pas de champs privés. Les sous-classes n'ont aucune notion des membres privés de leur classe parent.
  • Conclusion :

Alors que les objets des sous-classes héritent des champs privés de leurs classes parents, les sous-classes elles-mêmes le font pas. Cette distinction entre l'héritage au niveau objet et l'héritage au niveau classe est cruciale pour comprendre le modèle d'héritage de Java. Malgré l'argument de l'intervieweur, le JLS donne une définition sans ambiguïté en la matière.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn