Dans un écosystème, j'ai une classe Basilic qui hérite d'une superclasse Végétal qui hérite elle-même d'une superclasse EtreVivant.
D'un autre côté j'ai une classe Homme qui hérite de Mammifère qui hérite elle-même de Animal qui hérite d'EtreVivant aussi. Homme possède une méthode manger() pour s'alimenter. Il peut manger un Végétal mais aussi un Animal (poissons, oiseaux, etc.)
je tape donc :
Basilic basilic = new Basilic(15); // 15 est un num d'identification
Homme homme = new Homme("Philippe");
homme.manger(basilic);
Le problème vient de ma méthode manger. Dans Homme j'ai mis :
public void manger(EtreVivant unEtre)
Le type EtreVivant me permet de passer en paramètre aussi bien un objet Animal que Vegetal. Le problème c'est que en faisant ainsi, je ne conserve que les attributs de la classe EtreVivant. Je perds les attribut comme estComestible et numero définis dans la sous-classe Vegetal par exemple.
Une solution serait l'overloading en définissant deux méthodes manger:
public void manger(Vegetal unEtre)
public void manger(Animal unEtre)
Le problème est que je risque d'intégrer d'autres types d'EtreVivant ce qui m'obligera à faire des modifs sur toutes mes classes à chaque fois. N'y a-t-il pas une autre solution en Java, comme de déclarer des types multiples pour un paramètres du genre manger(Vegetal, Animal unEtre) ?? Le casting ne fonctionne pas non plus car au moment où je caste dans ma méthode manger, l'objet unEtre a déjà perdu une partie de ses infos.
Partager