9
votes

Java polymorphisme Création d'un objet de sous-classe en utilisant sa variable de superclasse

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


0 commentaires

3 Réponses :


0
votes
  1. Ceci est correct, même si la référence est de type animal , tous les appels de méthode vont résoudre à la définition dans lézard si présent, sinon la version Le prochain parent immédiat sera appelé et ainsi de suite.

  2. A est juste une référence et l'objet réel est de type lézard . Donc, les constructeurs dans lézard seront appelés. Ils peuvent à leur tour appeler les constructeurs en super classes en utilisant super () .


0 commentaires

0
votes
  1. Toutes les méthodes remplacées dans la classe de lézard seront utilisées à la place de celles de la classe d'animaux

    Oui, vous avez raison

  2. quel constructeur de classes sera utilisé lors de la création d'un?

    Lorsque vous créez une sous-classe, cela appellera implicitement le constructeur de Super Class. Par conséquent, les deux superches, qui est animal et la classe inférieure, qui est lézard , sera utilisé.


0 commentaires

9
votes

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>

Oui, vous avez raison.

2.Salo, quel constructeur de classe sera utilisé lors de la création d'un? xxx

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 Comme la première ligne de votre constructeur de lézard serait super () par défaut, sauf si vous appelez un constructeur surchargé surchargé de lézard en utilisant ceci () . Dans le constructeur animal, il y aura un autre appel à Super () dans la première ligne. En supposant que l'animal ne prolonge pas de classe, java.lang.Object's constructeur sera appelé comme java.lang.Object est la super classe de chaque objet. xxx

L'ordre d'exécution serait

  1. Les lézards constructeur seront invoqués
  2. 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
  3. Le constructeur de java.lang.Object sera invoqué d'animal à l'aide de Super ()
  4. Le code de constructeur de java.lang.Object sera exécuté
  5. Le code du constructeur d'animaux exécutera
  6. Les lézards Constructor Code exécuteront

3 commentaires

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 :)