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. La 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 de mettre en œuvre un contrat. La classe abstraite est une classe qui ne peut pas être initialisée mais qui peut être étendue. L'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 nulle. Par conséquent, les classes abstraites agissent comme des classes parentes à partir desquelles les classes enfants sont dérivées de sorte que la classe enfant partage les caractéristiques incomplètes de la classe parente et des fonctionnalités peuvent ê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. Ce que tout cela signifie, c'est que lorsque le programmeur nomme une classe en tant qu'abstrait, elle dit que la classe sera incomplète et qu'elle aura des éléments qui devront être complétés par les sous-classes héritées. C'est une bonne façon de créer un contrat entre deux programmeurs, ce qui simplifie les tâches de développement logiciel. Le programmeur, qui écrit du code pour hériter, doit suivre exactement les définitions de 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éthode et des déclarations 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. À l'aide du mot clé Implements en Java, vous pouvez implémenter plusieurs interfaces dans une seule classe.

Quelle est la différence entre la classe abstraite et l'interface?

Les classes abstraites représentent généralement un concept abstrait ou une entité avec une implémentation partielle ou nulle. D'un autre côté, une interface est un type abstrait qui est utilisé pour spécifier un contrat qui doit être implémenté par les 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 toutes les variables, mais les interfaces ne peuvent définir que des constantes. Une classe ne peut pas hériter de plusieurs classes abstraites mais peut implémenter plusieurs interfaces. Une interface ne peut pas implémenter une autre interface. Cependant, une interface peut étendre une classe.