Classe abstraite vs Interface
La classe abstraite et l'interface sont deux constructions orientées objet trouvées dans de nombreux langages de programmation orientés objet comme Java. Une classe abstraite peut être considérée comme une version abstraite d'une classe régulière (concrète), tandis qu'une interface peut être considérée comme un moyen d'implémenter un contrat. La classe abstraite est une classe qui ne peut pas être initialisée mais qui peut être étendue. Interface est un type qui doit être implémenté par d'autres classes. En Java, les classes abstraites sont déclarées à l'aide du mot-clé Abstract, tandis que le mot-clé interface est utilisé pour définir une interface.
Qu'est-ce qu'une classe abstraite ?
En règle générale, les classes abstraites, également appelées classes de base abstraites (ABC), ne peuvent pas être instanciées (une instance de cette classe ne peut pas être créée). Ainsi, les classes abstraites n'ont de sens que si le langage de programmation prend en charge l'héritage (possibilité de créer des sous-classes à partir de l'extension d'une classe). Les classes abstraites représentent généralement un concept abstrait ou une entité avec une implémentation partielle ou inexistante. Par conséquent, les classes abstraites agissent comme des classes parentes à partir desquelles les classes enfants sont dérivées afin que la classe enfant partage les fonctionnalités incomplètes de la classe parente et que des fonctionnalités puissent être ajoutées pour les compléter.
Les classes abstraites peuvent contenir des méthodes abstraites. Les sous-classes étendant une classe abstraite peuvent implémenter ces méthodes abstraites (héritées). Si la classe enfant implémente toutes ces méthodes abstraites, il s'agit d'une classe concrète. Mais si ce n'est pas le cas, la classe enfant devient également une classe abstraite. Tout cela signifie que, lorsque le programmeur nomme une classe en tant qu'abstrait, il dit que la classe sera incomplète et qu'elle contiendra des éléments qui devront être complétés par les sous-classes héritées. C'est une belle façon de créer un contrat entre deux programmeurs, ce qui simplifie les tâches de développement de logiciels. Le programmeur, qui écrit du code pour hériter, doit suivre exactement les définitions de la méthode (mais peut bien sûr avoir sa propre implémentation).
Qu'est-ce qu'une interface ?
Une interface est un type abstrait utilisé pour spécifier un contrat qui doit être implémenté par les classes qui implémentent cette interface. Le mot-clé interface est utilisé pour définir une interface et le mot-clé Implements est utilisé pour implémenter une interface par une classe (en langage de programmation Java). Habituellement, une interface ne contiendra que des signatures de méthodes et des déclarations de constantes. Toute interface qui implémente une interface particulière doit implémenter toutes les méthodes définies dans l'interface ou doit être déclarée en tant que classe abstraite. En Java, le type d'une référence d'objet peut être défini comme un type d'interface. Mais cet objet doit être nul ou contenir un objet d'une classe qui implémente cette interface particulière. En utilisant le mot-clé Implements en Java, vous pouvez implémenter plusieurs interfaces dans une seule classe.
Quelle est la différence entre une classe abstraite et une interface ?
Les classes abstraites représentent généralement un concept abstrait ou une entité avec une implémentation partielle ou inexistante. D'autre part, une interface est un type abstrait utilisé pour spécifier un contrat qui doit être implémenté par des classes. Les classes abstraites doivent être héritées (ou étendues), tandis que les interfaces doivent être implémentées. Les classes abstraites peuvent contenir des méthodes abstraites, alors qu'une interface ne doit contenir que des méthodes abstraites. Les classes abstraites peuvent contenir n'importe quelle variable, mais les interfaces ne peuvent définir que des constantes. Une classe ne peut pas hériter de plus d'une classe abstraite mais peut implémenter plusieurs interfaces. Une interface ne peut pas implémenter une autre interface. Cependant une interface peut étendre une classe.