Autre situation où l’on exploite le polymorphisme
277
Voici quelques exemples précisant la méthode m appelée par l’instruction a.m, selon la nature
de l’objet effectivement référencé par a (de type A) :
• a référence un objet de type A : méthode m de A ;
• a référence un objet de type B : méthode m de A ;
• a référence un objet de type C : méthode m de C ;
• a référence un objet de type D : méthode m de D ;
• a référence un objet de type E : méthode m de A ;
• a référence un objet de type F : méthode m de C.
Voici quelques autres exemples correspondant cette fois à l’appel b.m :
• b référence un objet de type B : méthode m de A ;
• b référence un objet de type D : méthode m de D ;
• b référence un objet de type E : méthode m de A.
Remarque
Cet exemple est très proche de celui présenté au paragraphe 6.4 du chapitre 12, page 262 à
propos de la redéfinition d’une méthode. Mais ici, la variable contenant la référence à un
objet de l’une des classes est toujours de type A, alors que, auparavant, elle était du type de
l’objet référencé. En fait, cet ancien exemple peut être considéré comme un cas particulier de
l’exemple actuel.
3 Autre situation où l’on exploite le polymorphisme
Dans les exemples précédents, les méthodes affiche de Point et de Pointcol se contentaient d’afficher les valeurs des attributs concernés, sans préciser la nature exacte de l’objet.
Nous pourrions par exemple souhaiter que l’information se présente ainsi pour un objet de
type Point :
Je suis un point
Mes coordonnees sont : 0 2
et ainsi pour un objet de type Pointcol :
Je suis un point colore de couleur 3
Mes coordonnees sont : 1 5
On peut considérer que l’information affichée par chaque classe se décompose en deux
parties : une première partie spécifique à la classe dérivée (ici Pointcol), une seconde partie commune correspondant à la partie héritée de Point : les valeurs des coordonnées. D’une
manière générale, ce point de vue pourrait s’appliquer à toute classe descendant de Point.
Dans ces conditions, plutôt que de laisser chaque classe descendant de Point redéfinir la
Précédent

- 300/370

Suivant