L’héritage
CHAPITRE 12
260
Nous pouvons donc définir dans Pointcol une méthode affiche reprenant la définition
actuelle de affichec. Comme les coordonnées de la classe Point sont encapsulées et que
cette dernière ne dispose pas de méthode d’accès, nous devons utiliser dans cette méthode
affiche de Pointcol la méthode affiche de Point. Dans ce cas, un petit problème se
pose ; en effet, nous pourrions être tentés d’écrire ainsi notre nouvelle méthode (en changeant
simplement l’en-tête affichec en affiche) :
classe Pointol dériveDe Point
{ méthode affiche
{ affiche
écrire «
et ma couleur est », couleur
}
.....
}
Or, l’appel affiche provoquerait un appel de... cette même méthode affiche de
Pointcol, lequel provoquerait à son tour un appel de cette même méthode. Nous serions en
présence d’appels récursifs qui, ici, ne se termineraient jamais. Il faut donc préciser qu’on
souhaite appeler non pas la méthode affiche de la classe Pointcol, mais la méthode
affiche de sa classe de base. Nous conviendrons de noter cela à l’aide du mot base, déjà
rencontré :
méthode affiche
{ base.affiche
// appel de la méthode affiche de la classe de base
écrire «
et ma couleur est », couleur
}
Dans ces conditions, l’appel pc.affiche entraînera bien l’appel de affiche de Pointcol, laquelle, comme nous l’espérons, appellera affiche de Point, avant d’afficher la
couleur.
Voici un exemple complet de programme illustrant cette possibilité :
classe Point
{ méthode Point (entier x, entier y)
{ abs := x ; ord := y }
méthode déplace (entier dx, entier dy)
{ abs := abs + dx ; ord := ord + dy }
méthode affiche
{ écrire «Je suis en », x, « », y }
entier abs, ord
}
classe Pointcol dériveDe Point
{ méthode Pointcol (entier x, entier y, entier c)
{ base (x, y)
couleur := c
}
méthode affiche
{ base.affiche
écrire « et ma couleur est : », couleur
}
entier couleur
}
Précédent

- 283/370

Suivant