Une instance de superclasse est-elle créée lorsque nous instancions une classe particulière en Java. Si tel est le cas, il y aurait beaucoup de frais généraux d'instanciation de toutes les superches super. J'ai essayé du code suivant: La sortie du code est la suivante: p> Alors, signifie-t-il que la hiérarchie complète des objets des superclasses sont créées lorsque nous instancions une classe? p> p>
3 Réponses :
Un seul objet est créé - mais cet objet est em> une instance de la superclasse et de la sous-classe (et Les em> constructeurs em> sont exécutés de la hiérarchie d'héritage - mais le java.lang.Object code>). Il n'y a pas trois objets distincts. Il y a un objet avec un ensemble de champs (fondamentalement l'union de tous les champs déclarés de haut en bas de la hiérarchie) et d'un en-tête d'objet. P>
Cette référence code> sera la même pour tous ces constructeurs; Ils contribuent tous à l'initialisation de l'objet unique. P>
J'ai toujours pensé (incorrectement) qu'une sous-classe distincte et un objet superclasse séparé sont créées sur la création d'un objet d'une sous-classe.
Et voici comment cela fonctionne dans Python aussi ou pour cette affaire C ++ (je crois, je ne l'ai pas essayé). Droit ?
Oui, c'est tout l'héritage de la classe. P>
Vous n'étudiez pas deux objets, cependant: vous instanciez un objet et exécutez à la fois le aclass code>, puis le constructeur bclass code> sur celui-ci. Le constructeur aclass code> est responsable de l'initialisation des pièces héritées de aclass code> et du constructeur bclass code> est responsable de l'initialisation des éléments supplémentaires définis dans < Code> Bclass code>. p>
J'ai toujours pensé (incorrectement) qu'une sous-classe distincte et un objet superclasse séparé sont créées sur la création d'un objet d'une sous-classe.
Oui.
Le constructeur de bclass ressemble à ceci: p> Si vous ne souhaitez pas utiliser le constructeur par défaut, vous pouvez faire comme ceci: p> < Pré> xxx pré> de Oracle Site: strong>
Si un constructeur n'invoque pas explicitement un constructeur de Superclass, le compilateur Java insère automatiquement un appel au constructeur sans argument de la superclasse. Si la super classe n'a pas de constructeur sans argument, vous obtiendrez une erreur de compilation. L'objet a un tel constructeur, donc si l'objet est la seule superclasse, il n'y a pas de problème. P> p>
+1 pour énoncer explicitement la ligne cachée "super ()". C'était un point de confusion pour moi de retour quand j'ai commencé à coder en Java.