Une classe abstraite ressemble beaucoup à une interface, mais le concept est un peu déroutant pour les débutants de la programmation orientée objet. Sur le plan conceptuel, une classe abstraite ressemble à une interface, bien entendu, sans aucune implémentation, mais elle a sa part de différences. Bien qu'une classe abstraite puisse être implémentée partiellement ou totalement, une interface doit être implémentée complètement. Eh bien, la différence la plus notable entre les deux est qu'une classe abstraite peut avoir une implémentation par défaut, alors qu'une interface est simplement la définition de méthodes qui ne contient que les déclarations de membre. Discutons les aspects théoriques des deux en détail.
Une classe abstraite est un type spécial de classe qui sert de base à d’autres classes et ne peut être instanciée. La logique d'implémentation d'une classe abstraite est fournie par ses classes dérivées. Pour rendre une classe abstraite, le modificateur «abstract» est utilisé, ce qui signifie que certaines implémentations manquantes doivent être implémentées dans la classe qui en dérive. Il contient des membres abstraits et non abstraits. Une classe abstraite est destinée à fournir des fonctionnalités de base qui peuvent être partagées et remplacées par plusieurs classes dérivées. Il est utile d'éviter tout type de duplication de code. Ils ressemblent beaucoup aux interfaces mais avec des fonctionnalités supplémentaires.
En revanche, une interface n'est pas une classe qui contient uniquement la signature de fonctionnalité. C'est un modèle sans implémentation. Conceptuellement, c'est juste la définition de méthodes qui ne contient que la déclaration de membres. C'est un shell vide qui ne contient pas l'implémentation de ses membres. C'est comme une classe de base abstraite qui ne contient que des membres abstraits tels que des méthodes, des événements, des indexeurs, des propriétés, etc. Elle ne peut pas être instanciée directement et ses membres peuvent être implémentés par n'importe quelle classe. De plus, une classe peut implémenter plusieurs interfaces. Cependant, une classe ne peut hériter que d'une seule classe..
Classe abstraite | Interface |
Une classe abstraite peut avoir tous les modificateurs d'accès pour la déclaration de membre de fonctions, sous-propriétés et propriétés.. | Une interface n'est pas autorisée à avoir des modificateurs d'accès pour la déclaration de membre, de fonctions, de propriétés, etc. Tous les membres sont supposés implicitement publics. |
Une classe ne peut tout au plus utiliser qu'une seule classe abstraite. | Une classe peut hériter d'un nombre quelconque d'interfaces. |
L'héritage multiple n'est pas pris en charge dans la classe abstraite. | Une interface peut supporter plusieurs héritages. |
Techniquement, c'est une classe qui peut ou non contenir à la fois la définition et son implémentation. | Une interface ne peut avoir que la signature de fonctionnalité, donc c'est en gros un shell vide. |
Une classe abstraite peut contenir des membres. consts, méthodes définies et souches de méthode. | Une interface ne peut contenir que des méthodes et des consts. |
Il définit l'identité principale d'une classe et est utilisé pour décrire des objets du même type de données.. | Il est utilisé pour décrire les capacités périphériques d'une classe. |
Les membres d'une classe abstraite ne peuvent pas être statiques à moins que ce soit un membre complet. | Les membres d'une interface ne peuvent pas être statiques. |
Idéal pour les implémentations du même genre et du même comportement. | Il est préférable d'utiliser des interfaces si plusieurs implémentations ne partagent que des signatures de méthode.. |
Il peut avoir une déclaration de constructeur. | Il ne peut pas y avoir de déclaration de constructeur. |
Une classe abstraite a des champs et des constrants prédéfinis. | Les champs ne peuvent pas être définis dans les interfaces. |
Il peut avoir des méthodes abstraites et non abstraites. | Il ne peut y avoir que des méthodes abstraites. |
Quelle est la différence entre une classe abstraite et une interface? C’est probablement l’une des questions les plus fréquemment posées lors d’un entretien technique. Vous êtes susceptible de trouver une pléthore d'informations sur les classes abstraites et les interfaces dans tout tutoriel C #, cependant, comprendre la différence entre les deux est une partie ardue. Vous pouvez consolider toutes les informations que vous pouvez trouver et que vous ne pouvez toujours pas obtenir suffisamment. Bien sur le plan conceptuel, les deux sont les termes les plus importants de la programmation et sont très similaires, cependant, ils diffèrent beaucoup en termes de fonctionnalité. Bien qu'une classe abstraite soit un type spécial de classe servant de base à d'autres classes, une interface, par contre, n'est qu'un shell vide contenant uniquement des déclarations de membres..