Prenons l'exemple d'un Chien et d'un Chat de la classe, et illustrons à l'aide de C#:
À la fois un chien et un chat sont des animaux, plus précisément, quadrupède mammifères (animaux sont waaay trop général). Supposons que vous avez un résumé de la classe des Mammifères, pour deux d'entre eux:
public abstract class Mammal
Cette classe de base aura probablement par défaut des méthodes telles que:
Qui sont tous des comportements qui ont plus ou moins la même mise en œuvre entre les deux espèces. Pour définir cela, vous devrez:
public class Dog : Mammal
public class Cat : Mammal
Maintenant, supposons qu'il existe d'autres mammifères, dont nous avons l'habitude de voir dans un zoo:
public class Giraffe : Mammal
public class Rhinoceros : Mammal
public class Hippopotamus : Mammal
Ce sera toujours valide car au cœur de la fonctionnalité, de la Chasse(), Alimentation() et Mate() sera toujours le même.
Cependant, les girafes, les rhinocéros et les hippopotames ne sont pas exactement les animaux que vous pouvez faire des animaux de compagnie. C'est là une interface sera utile:
public interface IPettable
{
IList<Trick> Tricks{get; set;}
void Bathe();
void Train(Trick t);
}
La mise en œuvre du contrat ci-dessus ne sera pas la même entre un chat et un chien; de mettre leur mise en œuvre dans une classe abstraite pour hériter sera une mauvaise idée.
Votre Chien et de Chat, les définitions devraient ressembler à ça:
public class Dog : Mammal, IPettable
public class Cat : Mammal, IPettable
Théoriquement, vous pouvez les écraser à la hausse de la classe de base, mais essentiellement une interface vous permet d'ajouter uniquement sur les choses dont vous avez besoin dans une classe sans la nécessité de l'héritage.
Par conséquent, parce que d'habitude on hérite d'une classe abstraite (dans la plupart des langages à objets à typage statique qui est... a des exceptions, notamment C++), mais être en mesure d'implémenter plusieurs interfaces, il vous permet de construire des objets strictement requis .