Différence entre une interface et une classe abstraite en C#
Classe abstraite et interface, les deux sont utilisées pour réaliser l’abstraction où nous pouvons déclarer des méthodes abstraites. Les classes abstraites et les interfaces ne peuvent pas être instanciées.
Qu’est-ce que une interface?
Une interface peut être utilisé pour implémenter une classe. L’interface ne contient aucune méthode qui comporte du code. Toutes les méthodes d’une interface sont des méthodes abstraites.
Une interface ne peut pas être instanciée. En revanche, les classes qui implémentent des interfaces peuvent être instanciées. Les interfaces ne contiennent jamais de variables d’instance, mais peuvent contenir des variables public static final.
Exemple d’une interface en C#:
namespace DemoApplication{ interface Animal { void manger(); } class Chien : Animal { public void manger() { System.out.println("Je mange"); } static void Main(string[] args){ Animal animal = new Chien(); animal.manger(); } } }
Qu’est-ce qu’une classe abstraite?
Une classe dont le mot clé est « abstract » est appelée une classe abstraite. Les classes abstraites doivent avoir au moins une méthode abstraite, c’est-à-dire des méthodes sans corps. Il peut avoir plusieurs méthodes concrètes(méthodes qui ont du code).
Les classes abstraites vous permettent de créer des modèles pour des classes concrètes. Mais la classe qui hérite doit implémenter la méthode abstraite.
Les classes abstraites ne peuvent pas être instanciées.
Exemple d’une classe abstraite en C#:
namespace DemoApplication { abstract class Forme { int a = 10; abstract public void calculerSurface(); } public class Rectangle : Forme { static void Main(string[] args) { Rectangle rect = new Rectangle(); rect.a = 20; rect.calculerSurface(); } public void calculerSurface() { System.out.println("Surface est " + (rect.a * rect.a)); } } }
Table de comparaison
Une interface peut hériter un nombre illimité d’interfaces à la fois | Une classe abstraite ne peut hériter qu’une classe ou une classe abstraite à la fois |
Une interface ne peut hériter qu’une autre interface | Une classe abstraite peut hériter une autre classe concrète (régulière) ou abstraite |
Une interface ne peut avoir que des méthodes abstraites | Une classe abstraite peut avoir des méthodes abstraites et concrètes |
Dans une interface, le mot clé «abstract» est facultatif pour déclarer une méthode en tant qu’abstrait. | Dans une classe abstraite, le mot clé «abstract» est obligatoire pour déclarer une méthode en tant qu’abstrait. |
Une interface ne peut avoir que des méthodes abstraites « public » | Une classe abstraite peut avoir des méthodes abstraites « protected » et « public » |
Une interface n’a pas de modificateurs d’accès. Tout ce qui est défini à l’intérieur d’une interface est supposé « public ». | Une classe abstraite peut avoir un modificateur d’accès. |
Il est préférable d’utiliser l’interface lorsque plusieurs implémentations partagent uniquement la signature de méthode. | Il doit être utilisé lorsque différentes implémentations du même type partagent un comportement commun. |
Une interface ne peut pas contenir des propriétés. | Une classe peut avoir des propriétés. |
Lorsque vous ne connaissez que les exigences et non son implémentation, vous utilisez une « Interface ». | Lorsque vous connaissez partiellement les implémentations, vous utilisez une « classe abstraite ». |
la signature de la méthode manger() dans l’interface Animal ne doit pas etre public car tout les signatures dans une interface sont par défauts public donc elle va générer une erreure dans la compilation(compile error time)
Salut Hamza,
Vous avez tout a fait raison, on doit pas utiliser les modificateurs d’accès pour les membres d’une interface. On a écrit un article précisément sur les interfaces en C#, vous pouvez jeter un coup d’oeil sur ce lien.
Merci de votre commentaire.