Le polymorphisme
CHAPITRE 13
272
1.1 Compatibilité par affectation
Considérons cette situation dans laquelle les classes Point et Pointcol sont censées disposer chacune d’une méthode affiche, ainsi que des constructeurs habituels (respectivement
à deux et trois paramètres) :
classe Point
{ méthode Point (entier x, entier y) { ..... }
méthode affiche { ..... }
}
classe Pointcol dériveDe Point
{ méthode Pointcol (entier x, entier y, entier c)
méthode affiche { ..... }
}
Avec ces instructions :
Point p ;
p := Création Point (3, 5)
on aboutit tout naturellement à cette situation :
Mais, il est également permis d’affecter à p, non seulement la référence à un objet de type
Point, mais aussi celle d’un objet de type Pointcol :
p = Création (Pointcol (4, 8, 2)
// p de type Point contient la référence
//
à un objet de type Pointcol
La situation correspondante est la suivante :
En revanche, l’affectation inverse serait illégale :
Pointcol pc
.....
pc := Création (Point (...))
// illégal
D’une manière générale :
p
3
5
(Point)
abs
ord
8
2
ord
couleur
4
(Point) p
abs
On peut affecter à une variable objet non seulement la référence à un objet du type
correspondant, mais aussi une référence à un objet d’un type dérivé.
Précédent

- 295/370

Suivant