L’héritage
CHAPITRE 12
254
3 Héritage et constructeur
Jusqu’ici, nous avons considéré des classes sans constructeur, aussi bien pour la classe de
base que pour la classe dérivée. En pratique, la plupart des classes disposeront d’au moins un
constructeur. Voyons quel va en être l’incidence sur l’héritage.
Supposons que notre classe Point dispose d’un constructeur à deux paramètres, jouant le
même rôle que la méthode initialise :
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
}
Supposons que nous souhaitions tout naturellement doter notre classe dérivée Pointcol
d’un constructeur à trois paramètres :
classe Pointcol dériveDe Point
{ .....
méthode Pointcol (entier x, entier y, entier c)
{ .....
}
Quel doit alors être le travail du constructeur de Pointcol ? Peut-il s’appuyer sur l’existence d’un constructeur de Point ?
En fait, dans tous les langages, le constructeur de Pointcol pourra exploiter l’existence
d’un constructeur de Point. Cependant, dans certains cas, le mécanisme sera « implicite »,
alors que, dans d’autres, il devra être « explicité ». Nous conviendrons ici que :
Voici ce que pourrait être notre constructeur de Pointcol :
méthode Pointcol (entier x, entier y, entier c)
{ base (x, y)
// appel du constructeur de la classe de base
// auquel on fournit les paramètres x et y
couleur := c
}
Voici un petit programme exploitant cette possibilité. Il s’agit d’une adaptation du programme du paragraphe 2, page 252, dans lequel nous avons remplacé les méthodes d’initialisation des classes Point et Pointcol par des constructeurs.
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 }
Le constructeur d’une classe dérivée doit prendre en charge la construction de la
totalité de l’objet, mais il peut appeler le constructeur de la classe de base, en le
désignant par le terme base.
Précédent

- 277/370

Suivant