Pourquoi les constructeurs ne peuvent pas être héritée en java?
Je suis un débutant en langage de programmation java, récemment, j'ai étudié que constructeurs ne peut pas être héritée en java, quelqu'un Peut-il expliquer pourquoi?
J'ai déjà lu ce lien de C++
- Vous avez
super()
bien.
Vous devez vous connecter pour publier un commentaire.
Dans des mots simples, un constructeur ne peut pas être héritée, puisque dans les sous-classes il a un autre nom (le nom de la sous-classe).
Vous pouvez le faire seulement:
Méthodes, au lieu de cela, sont héritées avec "du même nom" et peut être utilisé.
Que pour la raison:
Il n'aurait pas beaucoup de sens pour hériter d'un constructeur, depuis le constructeur de la classe Un moyen de créer un objet de type A, et le constructeur de la classe B signifie que la création d'un objet de la classe B.
Vous pouvez toujours utilisation constructeurs à partir d'Un intérieur B mise en œuvre du si:
super(...)
. Si vous avez des dizaines de ces sous-classes, ce sera un rétroprojecteur.Ce que vous en parlons, c'est de Java niveau de langue. Si les constructeurs ont hérité, qui rendrait impossible de faire de la classe privée. Comme nous le savons, la visibilité des méthodes ne peuvent pas être revus à la baisse.
Object
classe dispose d'un constructeur sans argument et chaque classe étendObject
, ainsi dans le cas du constructeur de l'héritage de chaque classe aurait un constructeur sans argument. Qui rompt OO principes.Les choses sont différentes sur le bytecode niveau. Lorsque l'objet est créé, les deux opérateurs sont appelés:
Nous pouvons modifier le bytecode de sorte que la mémoire est allouée pour les Enfants de la classe et un constructeur est appelé de la classe Parent. Dans ce cas, nous pouvons dire que les constructeurs sont héritées. Un avis si nous n'avons pas désactiver la vérification du code octet, JVM va lever une exception lors du chargement de la classe. Nous pouvons faire cela en ajoutant
-noverify
argument.Conclusion:
Raison mentionnée dans les docs de l'Héritage
Vous pouvez consulter les docs de Fournir des Constructeurs pour Vos Classes
data type
signifiereturn type
, oui ils n'ont pas dereturn type
.new
. Il ne peut pas être appelé comme une méthode.Si l'héritage n'est pratiquement pas possible en tant que tel.
Cependant, dans une construction que l'on pourrait appeler d'autres constructeurs.
this(...)
;super(...)
;Exemple
Il n'en est malheureusement pas de possibilité d'utiliser Un constructeur pour un booléen:
La langue conçoit pourrait avoir mis en place une telle chose comme:
Générer pour chaque constructeur public dans la classe de base, un constructeur avec la même signature que si un constructeur n'est pas déjà définies. Appel
super
avec les mêmes paramètres. Appelthis()
si il y a un constructeur par défaut.Qui semble un peu les ballonnements le code. Ce n'est pas simplement un pointeur dans une méthode virtuelle de la table, par la méthode de droits de succession/impérieuse d'œuvres.
Les constructeurs ne sont pas des membres de classes et seuls les membres qui sont héréditaires. Vous ne pouvez pas hériter d'un constructeur. Qui est, vous ne pouvez pas créer une instance d'une sous-classe à l'aide d'un constructeur de l'un de ses super-classes.
Réponse Simple, je l'ai observé, Vous ne pouvez pas appeler ou utiliser des constructeurs de la classe mère de la classe enfant directement, mais les méthodes de la classe parent, vous pouvez utiliser directement dans la classe enfant.
Dans le cas où vous avez de la méthode dans la classe enfant avec le même nom que dans la classe parent à ce moment-là seulement, vous devez utiliser "super" mot-clé à invoquer la mère de la méthode de classe résoudre appel ambiguïté.
"Invoquer" parent constructeur de la classe dans la classe enfant on a toujours besoin de "super" mot-clé. Donc, parent constructeurs de classe "ne sont pas directement disponibles" comme parent méthodes de la classe dans la classe enfant nous pouvons donc dire que les constructeurs ne peuvent pas être héritée.
Pas, les constructeurs ne seront pas hérité de la sous-classe, même si sa non-membre statique, il ne sera pas hérité de la sous-classe parce que les constructeurs ne seront pas chargés à l'intérieur de l'objet, il est utilisé pour créer l'objet. Les constructeurs sont comme un initialiseur statique
Seuls les champs, les méthodes et les classes imbriquées sont les membe de toute classe pas les Constructeurs. Une sous-classe hérite de tous les membres comme (les champs, les méthodes et les classes imbriquées) de sa super-classe. Les constructeurs ne sont pas membres, de sorte qu'ils ne sont pas héritées par les sous-classes, mais le constructeur de la super-classe peut être appelée à partir de la sous-classe.
Syntaxique limitations peuvent souvent être contournée devrait y avoir aucune raison pour une fonction dans une manière conceptuelle. Avec cela, je crois, la vraie raison pour ne pas soutenir l'héritage du constructeur n'est pas due à syntaxique des limites mais plutôt en raison de la sémantique.
Sur le plan conceptuel héritage fournit un mécanisme pour acquérir (ou d'en hériter) un comportement et le plus probable, sans écrire de n'importe quel morceau de code puisque son but est de fournir de réutiliser le code. Pour un enfant de la classe, elle ne fait aucun cas de hériter du comportement de l'initialisation de la classe parente. Après tout, hérité d'un comportement trouve son meilleur lorsqu'un appelant externe peut l'utiliser sans savoir qui (dans la chaîne parent) a effectivement mis en œuvre. Comme vous pouvez le voir, l'appelant n'a presque pas d'affaires de savoir comment un parent de la classe est initialisée par l'intermédiaire de son enfant de la classe, il n'est pas perceptible raison de promouvoir l'héritage d'un parent de la classe) constructeur.
vous ne pouvez pas hérité des constructeurs, mais vous pouvez hériter initialisé la valeur dans le constructeur comme
Pas comme l'a déclaré Mikhaïl; les constructeurs ne sont pas héritées. Vous ne pouvez pas hériter d'un constructeur de la superclasse dans votre sous-classe. Cependant lorsqu'un objet est instancié avec l'opérateur "new" en java, que l'objet hériter de tous les constructeurs de ce sous-classe à classe mère(parent), même y compris ceux dans la classe abstraite(car ils sont aussi super classe).