Envoyé par
Premium
Dans quel cas,utiliser l'abstrait plutot qu'une interface
Je ne sais pas si on peut dire ça comme ça...
La classe abstraite est une classe "générale" de laquelle vont hériter toutes les classes filles. Il faut donc qu'elle soit suffisamment générale pour pouvoir le faire.
La spécialisation se fait ensuite avec les interfaces.
Par exemple, dans ton cas, tu peux déjà séparer:
1) d'un côté les classes Animal, Mammifère, Singe, Felin, Serpent (qui ne représentent pas un animal particulier)
2) de l'autre les classes Chimpanzé, Orang-Outan, Lion, Tigre et Boa (qui représentent un animal particulier, donc qui en théorie sont au bout de la chaîne d'héritage)
dans le premier groupe, tu peux mettre la classe Animal à part. Pourquoi? Parce que tu peux faire hériter les 4 autres de cette classe (tous sont des animaux). Il y a donc de fortes chance que la classe Animal soit donc une classe abstraite.
Après, si on regarde, on a envie de s'orienter vers les Mammiferes d'un côté, les Serpents de l'autre. Ca, ça serait bien de le mettre en interface. Pourquoi? Parce tu vas pouvoir y définir toutes les méthodes communes à chaque groupe animal (les particularités des Mammiferes ne sont pas les mêmes que celles des Serpents). Les définir, mais pas les implémenter! C'est juste pour respecter un formalisme pour les classes qui l'implémenteront (un peu l'équivalent d'un moule...)
Ensuite, il ne te reste plus qu'à prendre les classes qui restent, en les faisant hériter de Animal, et en implémentant l'interface qui convient.
En gros, tu pourrais avoir:
Animal (classe abstraite) > Singe (classe, avec interface Mammifere) > Chimpanzé (classe)
Partager