Le polymorphisme
CHAPITRE 13
276
méthode affiche
{ base.affiche
écrire « et ma couleur est : », couleur
}
entier couleur
}
Je suis en 0 2
Je suis en 1 5
et ma couleur est : 3
Je suis en 2 8
et ma couleur est : 9
Je suis en 1 2
Exemple d’utilisation du polymorphisme pour manipuler un tableau « hétérogène » d’objets
2 Généralisation à plusieurs classes
Nous venons de vous exposer les fondements du polymorphisme en ne considérant que deux
classes. Mais il va de soi qu’ils se généralisent à une hiérarchie quelconque. Considérons à
nouveau la hiérarchie de classes présentée au paragraphe 6.4 du chapitre 12, page 262, dans
laquelle seules les classes marquées d’un astérisque définissent ou redéfinissent la
méthode m :
Avec ces déclarations :
A a ; B b ; C c ; D d ; E e ; F f ;
les affectations suivantes sont légales :
a := b ; a := c ; a := d ; a := e ; a := f ;
b := d ; b := e ;
c := f ;
En revanche, celles-ci ne le sont pas :
b := a ;
// erreur : A ne descend pas de B
d := c ;
// erreur : C ne descend pas de D
c := d ;
// erreur : D ne descend pas de C
A*
B
C*
D*
E
F
CHAPITRE 13
276
méthode affiche
{ base.affiche
écrire « et ma couleur est : », couleur
}
entier couleur
}
Je suis en 0 2
Je suis en 1 5
et ma couleur est : 3
Je suis en 2 8
et ma couleur est : 9
Je suis en 1 2
Exemple d’utilisation du polymorphisme pour manipuler un tableau « hétérogène » d’objets
2 Généralisation à plusieurs classes
Nous venons de vous exposer les fondements du polymorphisme en ne considérant que deux
classes. Mais il va de soi qu’ils se généralisent à une hiérarchie quelconque. Considérons à
nouveau la hiérarchie de classes présentée au paragraphe 6.4 du chapitre 12, page 262, dans
laquelle seules les classes marquées d’un astérisque définissent ou redéfinissent la
méthode m :
Avec ces déclarations :
A a ; B b ; C c ; D d ; E e ; F f ;
les affectations suivantes sont légales :
a := b ; a := c ; a := d ; a := e ; a := f ;
b := d ; b := e ;
c := f ;
En revanche, celles-ci ne le sont pas :
b := a ;
// erreur : A ne descend pas de B
d := c ;
// erreur : C ne descend pas de D
c := d ;
// erreur : D ne descend pas de C
A*
B
C*
D*
E
F
