Ne les sous-classes héritent des champs privés?

C'est une question d'entrevue.

Ne les sous-classes héritent privé
champs?

J'ai répondu "Non", parce que nous ne pouvons pas accéder à l'aide de la "normale OOP façon". Mais l'enquêteur pense qu'ils sont héréditaires, parce que nous pouvons accéder à ces champs ou indirectement à l'aide de réflexion et ils existent encore dans l'objet.

Après je suis rentré, j'ai trouvé la citation suivante dans le javadoc:

Membres privés dans une super-classe

Un
sous-classe n'hérite pas de la privée
les membres de sa classe parente.

Connaissez-vous des arguments pour l'interviewer avis?

  • Le son de votre question, un simple "oui" ou "non" réponse n'est pas assez profond. Je pense que vous avez capturé l'essence de la matière là, cependant.
  • J'ai été dans une situation similaire une fois et j'ai réalisé que je n'ai même pas envie de travailler pour une société où l'enquêteur sait moins de Java que moi. 🙂
  • édité)
  • Probablement c'est la même situation), Mais je veux vérifier ma réponse.
  • L'intervieweur va parfois en désaccord avec vous, même quand il sait que vous êtes de droite. Un bon intervieweur va essayer d'apprendre plus sur vous que vos connaissances techniques.
  • Thomas-Cramer, C'est un bon point. Je ne pense pas à ce sujet avant.
  • Est Java Language Specification aussi mal écrit? Voir RD01 réponse: stackoverflow.com/questions/4716040/...
  • Heh, j'ai su que le projet de Loi Joie de Berkeley, quand il était un étudiant diplômé. Si jamais je le vois encore, je vais pour se plaindre que l'utilisation d'hériter. Je suppose que le mot "hériter" a plusieurs sens, et c'est OK, au moins avec Java, pour l'utiliser de cette façon. Mais ce n'est certainement va paralyser votre compréhension de la programmation orientée objet, si vous le prenez littéralement, et ne réalisent pas qu'ils utilisent pour décrire une encapsulation héritage politique et non pas le comportement de l'héritage.
  • Thomas-Cramer je ne voudrais pas travailler avec des gens qui sont délibérément mentir pour tester ma réaction.
  • À mon avis intervieweur a le droit de dire qu'ils l'ont hérité, mais ils ne sont pas accessibles, sont deux choses différentes. Sa la question comment vous avez vraiment comprendre le concept d'héritage. pour la clarté de l'exposé, je tiens à vous rappeler que chaque fois que vous créez un objet de la classe enfant objet de parent ou de la super-classe est créée, vous pouvez modifier les comportements par des fonctions de remplacement ou vous pouvez ajouter d'autres propriétés ou les champs à l'enfant, mais tous les champs de la classe parent serait lancé dans la mémoire et que vous utilisez ces champs ainsi indirectement par l'appel de classe parent funcs.
  • Ahmad, Depuis JLS précise que ce n'est pas, de toute autre source qui est mal, n'est-ce pas?
  • Kurlin: Vous argument est valide, c'est ce que je disais que c'est vraiment important la façon dont vous comprenez l'Héritage, toutes ces terminologies sont ouvert pour le débat et il n'y a pas de définition unique de concepts de programmation orientée objet, comme si vous essayez de trouver une définition de l'Agrégation, vous finirez par avoir plus de 5 ou 6 différentes définitions, de même est à l'Abstraction de la Différence entre la Fonction de Surcharge et Primordial, etc.
  • Kurlin: Donc, j'ai mon propre point de vue au sujet de ces concepts, et je regarde sur la fonction de l'Objet de point de vue et d'être un enfant de l'objet, même si elle n'a pas un accès direct aux valeurs de champs privés, il utilise toujours les champs privés d'une façon ou d'une autre, Donc essayer de vous apporter de l'affichage d'un langage de programmation en particulier et ensuite de lui donner une pensée. Merci
  • Ahmad . Sortons de langage de programmation particulier. Peut-on être sûr que l'objet va contenir tous les champs de ce parent? Pas de. Il pourrait être mis en œuvre dans de très diffèrent de façon. Alors pourquoi devrions-nous penser qu'ils n'en hériter? Tous notre définition est sur les interfaces (non mises en œuvre). Champs privés ne sont pas accessibles, donc, nous ne sommes pas en hériter.
  • Kurilin: Dans tout langage de programmation, n'importe quel enfant d'initialiser l'objet parent, d'où tous les champs sont héréditaires, mais il y a peut-être quelques-uns d'entre eux qui ne peuvent pas être modifiés ou lu par l'enfant objet directement ces champs devraient être marqués comme privés.
  • Je pense que les deux réponses sont correctes, si vous n'avez pas EXPLICITEMENT définir ce que vous entendez par héritage. Top voté réponse explique cette finesse. À propos de la réflexion de la partie, qui sonne presque comme une blague pour moi. Oui, vous pouvez le faire, vous pouvez également accéder à ces valeurs de champ de cache du processeur ou par la rupture de la mémoire du processus des limites et des hacks comme ça. Donc, moi aussi, je pense que la question était plus sur de voir votre réponse, puis d'obtenir la bonne réponse. Personnellement, je ne dire que ces domaines ne font pas partie des CLASSES mais une partie des OBJETS.
  • Pourquoi ne pas illustrer le concept avec le code ?
  • Eh bien, je pense que nous devons d'abord comprendre la signification de "l'héritage" en Java. Le sous-classe ne possède pas le domaine privé et le sous-classe a le domaine privé, mais ne peut pas l'accès sont différents, dont l'un se réfère à la signification exacte de l'héritage en Java?
  • Eh bien, vous venez de coller à partir de la Javadoc la moitié de la vérité. À partir de la Javadoc l'ensemble de la phrase dit: "Une sous-classe n'hérite pas de la les membres privés de la classe parente. Toutefois, si la superclasse a public ou protégé méthodes pour accéder aux champs privés, ceux-ci peuvent également être utilisés par la sous-classe".
  • En outre, "Une sous-classe hérite de l'ensemble du public et des membres de son parent, n'importe quel paquet de la sous-classe est en"

InformationsquelleAutor Stan Kurilin | 2011-01-17