Héritage et hiérarchies des classes
d. Simple ou multiple
N classes peuvent dériver d’une superclasse, c’est ce que vous avez vu jusqu’à présent. Si vous regardez la
hiérarchie actuelle, il serait éventuellement possible de modifier quelque chose. Un omnivore mange à la fois de
l’herbe (fruits et légumes) et de la viande. Il est donc à la fois herbivore et carnivore. Pourraiton alors créer une
classe Omnivore dérivant des classes Carnivore et herbivore ? C’est possible. Dans ce cas la nouvelle classe hérite
des membres des deux classes pères.
Classe omnivore hérite de Herbivore, Carnivore
...
FinClasse
Du coup la hiérarchie devient :
Héritage multiple, attention à la complexité
C’est possible, mais cela pose souvent plus de problèmes que ça en résout. Les avis sont partagés sur ce sujet. Mais
voici un bref exemple des implications un peu tordues générées par l’héritage multiple : si deux méthodes de même
nom sont définies dans les deux superclasses et pas dans la classe dérivée, quelle méthode doit être appelée si son
nom est appelé dans celleci ? Les langages proposent des astuces pour gérer ce genre de cas, mais ça devient très
complexe. L’héritage multiple a été implémenté dans le langage C++ mais pas en Java, tout au moins pas
directement : une classe ne dérive que d’une seule classe.
- 11 -
© ENI Editions - All rigths reserved - Jonifar lina
204
d. Simple ou multiple
N classes peuvent dériver d’une superclasse, c’est ce que vous avez vu jusqu’à présent. Si vous regardez la
hiérarchie actuelle, il serait éventuellement possible de modifier quelque chose. Un omnivore mange à la fois de
l’herbe (fruits et légumes) et de la viande. Il est donc à la fois herbivore et carnivore. Pourraiton alors créer une
classe Omnivore dérivant des classes Carnivore et herbivore ? C’est possible. Dans ce cas la nouvelle classe hérite
des membres des deux classes pères.
Classe omnivore hérite de Herbivore, Carnivore
...
FinClasse
Du coup la hiérarchie devient :
Héritage multiple, attention à la complexité
C’est possible, mais cela pose souvent plus de problèmes que ça en résout. Les avis sont partagés sur ce sujet. Mais
voici un bref exemple des implications un peu tordues générées par l’héritage multiple : si deux méthodes de même
nom sont définies dans les deux superclasses et pas dans la classe dérivée, quelle méthode doit être appelée si son
nom est appelé dans celleci ? Les langages proposent des astuces pour gérer ce genre de cas, mais ça devient très
complexe. L’héritage multiple a été implémenté dans le langage C++ mais pas en Java, tout au moins pas
directement : une classe ne dérive que d’une seule classe.
- 11 -
© ENI Editions - All rigths reserved - Jonifar lina
204
