5.4 Transtypage et polymorphisme
Définition
Le transtypage s’applique de différentes manières :
Une instance enfant peut être considérée en tant qu’instance d’ancêtre sans mot-clé :
afficherAnimal(FelixLeChat);Une instance de classe enfant peut être référencée (stockée) par une variable de type parent :
Chien filou = new Animal(...);
C’est le transtypage ascendant, qui est lié au principe de généralisation.
(!) L’inverse n’est pas possible :
Animal a = new Chien(...)
- Avec un cast, une instance stockée par une variable de type parent peut à nouveau être référencée par une variable de son type réel d’instance :
(Chien) filou.methodeSpecifiqueClasseChien();
C’est le transtypage descendant, qui est lié au principe de spécialisation.
Il est possible de tester le type d’instance avec l’expression booléenne
(filou instanceof Chien).
Très utile si l’on souhaite par exemple afficher un tableau de chats et de chiens :
- ils héritent tous de la classe Animal :
Animal[]- en testant le type d’instance d’une case d’index
i, on peut appeler des méthodes spécifiques à chaque instance :
if (Animal[i] instanceof Chat) {
Animal[i].methodeSpecifiqueClasseChat();
}Le polymorphisme est la capacité à choisir dynamiquement la méthode qui correspond au type réel de l’objet.