...
Fin
Le programme obj10 crée deux objets et donne l’affichage suivant :
Je suis A
Je suis B
Pour appeler explicitement le constructeur de A depuis B, vous devez le faire explicitement au sein du constructeur de
B via le motclé super. Celuici remplaçant l’objet superclasse, il s’utilise comme un objet. Modifiez le constructeur de B
ainsi :
Classe B hérite de A
...
Constructeur B()
Début
super()
Afficher "Je suis B"
Fin
...
FinClasse
Vous obtenez en relançant obj10 le résultat suivant :
Je suis A
Je suis A
Je suis B
Une nouvelle ligne correspondant à l’appel du constructeur de A depuis B est affichée. Là encore, en cas d’héritage
en cascade, vous devez appeler les constructeurs en cascade.
Il faut bien comprendre pourquoi l’appel au constructeur de la superclasse n’est pas automatique : rien ne vous
empêche au sein du constructeur de la classe dérivée d’initialiser les attributs de la superclasse directement, puisque
sauf si ceuxci sont privés, vous y avez accès directement. L’appel implicite au constructeur de la superclasse
risquerait de faire double emploi ou d’écraser vos valeurs.
2. Les destructeurs
Tout comme le constructeur est appelé à la création d’un objet, le destructeur est appelé quand l’objet est détruit, ou
l’allocation dynamique libérée. Tous les langages ne proposent pas de destructeurs, notamment Java, mais proposent
parfois des méthodes particulières appelées automatiquement quand l’objet n’est plus utilisé (sortie de fonction quand
l’objet est local, remise à NIL de sa valeur, etc).
Le destructeur est rarement employé en algorithmique car les professeurs l’enseignant ont souvent le langage Java à
l’esprit comme langage d’implémentation, et pas le C++ par exemple. Pourtant il peut être important dans des
langages où l’allocation de la mémoire est dynamique. Un attribut d’un objet peut être un pointeur alloué
dynamiquement. Quand vous n’avez plus besoin de l’objet et que vous le libérez, que se passetil pour ce pointeur ? Il
faut libérer aussi la zone allouée.
Le destructeur ressemble beaucoup au constructeur, sauf que :
q Il n’y a qu’un seul destructeur.
q Il ne prend pas de paramètres.
q Son nom est composé d’un tilde suivi du nom de la classe.
q Vous le faites précéder du mot Destructeur.
Il dispose des mêmes propriétés pour les classes dérivées. Vous devez éventuellement l’appeler vousmême, en
cascade.
Classe B hérite de A
...
Constructeur B()
Destructeur ~B()
- 3 -
© ENI Editions - All rigths reserved - Jonifar lina
210
Fin
Le programme obj10 crée deux objets et donne l’affichage suivant :
Je suis A
Je suis B
Pour appeler explicitement le constructeur de A depuis B, vous devez le faire explicitement au sein du constructeur de
B via le motclé super. Celuici remplaçant l’objet superclasse, il s’utilise comme un objet. Modifiez le constructeur de B
ainsi :
Classe B hérite de A
...
Constructeur B()
Début
super()
Afficher "Je suis B"
Fin
...
FinClasse
Vous obtenez en relançant obj10 le résultat suivant :
Je suis A
Je suis A
Je suis B
Une nouvelle ligne correspondant à l’appel du constructeur de A depuis B est affichée. Là encore, en cas d’héritage
en cascade, vous devez appeler les constructeurs en cascade.
Il faut bien comprendre pourquoi l’appel au constructeur de la superclasse n’est pas automatique : rien ne vous
empêche au sein du constructeur de la classe dérivée d’initialiser les attributs de la superclasse directement, puisque
sauf si ceuxci sont privés, vous y avez accès directement. L’appel implicite au constructeur de la superclasse
risquerait de faire double emploi ou d’écraser vos valeurs.
2. Les destructeurs
Tout comme le constructeur est appelé à la création d’un objet, le destructeur est appelé quand l’objet est détruit, ou
l’allocation dynamique libérée. Tous les langages ne proposent pas de destructeurs, notamment Java, mais proposent
parfois des méthodes particulières appelées automatiquement quand l’objet n’est plus utilisé (sortie de fonction quand
l’objet est local, remise à NIL de sa valeur, etc).
Le destructeur est rarement employé en algorithmique car les professeurs l’enseignant ont souvent le langage Java à
l’esprit comme langage d’implémentation, et pas le C++ par exemple. Pourtant il peut être important dans des
langages où l’allocation de la mémoire est dynamique. Un attribut d’un objet peut être un pointeur alloué
dynamiquement. Quand vous n’avez plus besoin de l’objet et que vous le libérez, que se passetil pour ce pointeur ? Il
faut libérer aussi la zone allouée.
Le destructeur ressemble beaucoup au constructeur, sauf que :
q Il n’y a qu’un seul destructeur.
q Il ne prend pas de paramètres.
q Son nom est composé d’un tilde suivi du nom de la classe.
q Vous le faites précéder du mot Destructeur.
Il dispose des mêmes propriétés pour les classes dérivées. Vous devez éventuellement l’appeler vousmême, en
cascade.
Classe B hérite de A
...
Constructeur B()
Destructeur ~B()
- 3 -
© ENI Editions - All rigths reserved - Jonifar lina
210
