Quelqu'un pourrait-il de manière simple m'expliquer la différence fondamentale entre les interfaces et les classes abstraites ?
Merci de votre aide
Quelqu'un pourrait-il de manière simple m'expliquer la différence fondamentale entre les interfaces et les classes abstraites ?
Merci de votre aide
-interface ne contient que des méthodes sans impléménetation et/ou attribut avec une valeur fixe.Envoyé par davidyannick
-classes abstraites:contient au moins une méthodes sans implémentation.
- interface vient pour résoudre le probléme d'héritage multiple. une interface peut hériter de plusieurs interfaces et une classe peut implémenter plusieurs interfaces.
- par contre une classe abstraite ne peut hériter que d'une seule classe.
Bba_M parles bien-sur de Java, d'autres langages comme C++ autorise l'héritage multiple. Je suis d'accord avec lui sauf sur un point : Java ne résoud pas le problème de l'héritage multiple, il l'évite, ce qui n'est pas la même choseEnvoyé par Bba_M
Non pas de java mais de C#Envoyé par bruno_pages
Merci pour vos premières infos
Bonjour
Comme l'a dit Bruno, les interfaces ne résolvent pas le problème de l'héritage multiple en Java. L'héritage multiple n'existe pas en Java, c'est un choix et les interfaces ne sont pas faites pour le contourner.
Je dirais plutôt qu'une interface sert à définir un comportement. D'ailleurs, en java, le nom d'une interface est souvent suffixé par 'able' (Comparable, Iterable, Runnable, Serializable...).
En gros, une interface permet d'ajouter une capacité à un Type (une classe, ou une autre interface).
Pour compléter;
on se rend bien compte de l'utilité de l'héritage dans les designs patterns, et par exemple dans le pattern strategy pour la classe abstraite.
Quand on hérite d'une classe "normale", la classe fille dispose de toutes les fonctions de la mère. Et elle peut rajouter des méthodes et attributs si nécessaire (c'est la spécialisation).
Parfois on se retrouve avec une tripoté de classe fille qui ont la meme méthode de la classe mère, mais chaque fille implémente la méthode à sa façon. Toutes les autres méthodes héritées restent les memes (on a pas à les changers). Dans ce cas il est bien d'utiliser la classe abstraite en héritage qui fourni la partie générique de l'implémentation et défini explicitement la méthode abstraite à implémenter (le code est bien claire à comprendre) et robuste car sa forme tout héritier à faire l'implémentation.
Un exemple d'école est l'implémentation des algorithmes de tri. On fait une classe abstraite avec la méthode Trier(Collection ...) et les classes filles se spécialise en tri à bulle, par permutation etc...
La "réalisation" d'interface est à bien discerner d'un héritage.
L'héritage c'est d'inné, on hérite de père en fils de nos propriétées intrinsèque. Realiser un interface c'est si on peu dire de l'acquis. Ca permet à des objets de classe complètement différente (de nature différente) de communiquer entre elle. Par exemple la classe homme peut réaliser l'interface Chasseur (j'observe ma cible, je la trouve, je l'abbat etc...). Mais ces fonctions un missile aussi peut le faire. Alors que par nature homme hérite de animal et missile de machine.
Voilà bonne modélisation à tous.
Je me souviens avoir discuté cette question ici : http://www.developpez.net/forums/sho...d.php?t=132984
j'aimerai bien connaitre les design pattern.. merci de me repondre.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager