Forum Clubic

Java: fonction utilisée dans 2 sous-classe

Bonjour à tous.

Voilà, mon problème n’est pas vraiment un problème, ce serait plutot une amélioration pour la lecture et la simplicité de mon programme. :sol:

Voici le contexte: j’ai une classe Animal et deux sous-classes Predateur et Proie. Dans chacune de ces sous-classes existe une fonction déplacer. Cette fonction possède des parties communes aux deux classes et des parties qui diffèrent.
J’aimerais donc savoir si il était possible pour simplifier de placer les parties communes dans la surclasse, en laissant les parties différentes dans les sous-classes, ou quelquechose du genre.

Merci de vos conseils :slight_smile:

Oui, en faisant une classe abstraite commune aux deux.

Et si tu as déjà de l’héritage, tu peux déléguer cela à une classe chargée de faire le déplacement (un peu comme si tu avais de l’héritage multiple, mais bon… C++ ;))

Oui j’ai oublié de préciser que la classe Animal était une classe abstraite.

Sans-Nom: créer une nouvelle classe pour le déplacement ne serait pas vraiment simplifier :ane:

Tu créer une classe intermédiaire:

Animal->Animal_qui_se_déplace->Predateur

Tes methodes relatives au déplacement seront dans la classe Animal_qui_se_deplace.

(sinon pourquoi pas mettre tes methodes de déplacement dans Animal?)

Tu peux très bien implémenter des méthodes dans une classe abstraite, c’est dans les interfaces que tu ne peux rien implémenter.

Sur la délégation: en Java on fait assez souvent de la délégation pour extraire des petits traitement, par exemple on implémente une classe “Comparator” plutôt que de rendre une classe “Comparable” : ça permet de faire des tris d’un type d’objet selon plusieurs critère; c’est plus souple, mais bien sûr, il faut en avoir besoin, sinon ça fait une usine pour pas grand chose…
Dans le cas du Comparator, on peut au pire faire une classe anonyme, ou une inner class static pour éviter de créer un nouveau fichier .java (et pour montrer qu’on ne s’en sert qu’à un endroit)
Autre exemple dans ton cas, tu pourrais avoir besoin de plusieurs type de déplacements ProieQuiMarche ProieQuiCourt… toute implémentant une interface Deplacement.
:slight_smile:

Ouaip.

L’avantage de déléguer aussi c’est de pouvoir facilement changement le comportement sans t’embêter.