Donc, je suis un étudiant et en train d'apprendre Java. Il y a un concept que j'ai une période difficile à saisir et j'espère que quelqu'un pouvait éclairer cela pour moi. Ma question concerne le polymorphisme. Disons par exemple, j'ai le code suivant.
Animal a = new Lizard("Lizzy", 6); //Lizard extends Animal
3 Réponses :
Ceci est correct, même si la référence est de type animal code>, tous les appels de méthode vont résoudre à la définition dans
lézard code> si présent, sinon la version Le prochain parent immédiat sera appelé et ainsi de suite. P> li>
A code> est juste une référence et l'objet réel est de type
lézard code>. Donc, les constructeurs dans
lézard code> seront appelés. Ils peuvent à leur tour appeler les constructeurs en super classes en utilisant
super () code>. P> li>
ol>
Oui, vous avez raison p> li>
Lorsque vous créez une sous-classe, cela appellera implicitement le constructeur de Super Class. Par conséquent, les deux superches, qui est Toutes les méthodes remplacées dans la classe de lézard seront utilisées à la place de celles de la classe d'animaux code> p>
quel constructeur de classes sera utilisé lors de la création d'un? code> p>
animal code> et la classe inférieure, qui est
lézard code>, sera utilisé. P> li>
ol>
1.from Ce que je comprends, car le type de variable est animal, une volonté aura toutes les caractéristiques d'un animal. Mais, depuis l'objet créé est un lézard, toutes les méthodes remplacées dans la classe de lézard être utilisé à la place de ceux de la classe d'animaux. Est-ce correct> p>
Oui, vous avez raison. P>
2.Salo, quel constructeur de classe sera utilisé lors de la création d'un? p> blockQuote>
xxx pré> Comme, le lézard est une sous-classe d'animaux, premier, le constructeur de lézards sera invoqué, puis du constructeur de lézards, il y aura un appel à constructeur animal Strong> Comme la première ligne de votre constructeur de lézard serait
super () forte> par défaut, sauf si vous appelez un constructeur surchargé surchargé fort> de lézard en utilisant ceci () strong> . Dans le constructeur animal, il y aura un autre appel à Super () Strong> dans la première ligne. En supposant que l'animal ne prolonge pas de classe, java.lang.Object's code> constructeur sera appelé comme
java.lang.Object code> est la super classe de chaque objet. P>
xxx pré> L'ordre d'exécution serait strong> p>
- Les lézards constructeur seront invoqués li>
- Sauf s'il y a un tel () appel à un constructeur surchargé, un appel à Super () I.e., les animaux de l'appel de Calls Constructeur No-Args LI>
- Le constructeur de java.lang.Object sera invoqué d'animal à l'aide de Super () LI>
- Le code de constructeur de java.lang.Object sera exécuté li>
- Le code du constructeur d'animaux exécutera li>
- Les lézards Constructor Code exécuteront LI> ol> blockQuote>
Merci beaucoup! C'était très utile.
J'ai une plus grande question rapide. Les animaux ont-ils des attributs tels que String Colorscales; et string lizardtype; Si ceux-ci n'étaient que dans la classe de lézard?
Nope, ils ne sont pas visibles pour animaux. Vous pouvez le tester rapidement en utilisant une classe de test simple pour une meilleure compréhension :)