Classe abstraite vs héritage
La classe abstraite et l'héritage sont deux concepts orientés objet importants trouvés 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 que l'héritage permet aux nouvelles classes d'étendre d'autres classes. La classe abstraite est une classe qui ne peut pas être initialisée mais qui peut être étendue. Ainsi, les classes abstraites n'ont de sens que si le langage de programmation prend en charge l'héritage. En Java, les classes abstraites sont déclarées à l'aide du mot-clé Abstract, tandis que le mot-clé Extends est utilisé pour hériter d'une (super) classe.
Qu'est-ce que la 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 afin que la classe enfant partage les fonctionnalités incomplètes de la classe parent 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. 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 aura des éléments qui doivent ê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 logiciel. Le programmeur, qui écrit du code pour hériter, doit suivre exactement les définitions de méthode (mais bien sûr peut avoir sa propre implémentation).
Qu'est-ce que l'héritage?
L'héritage est un concept orienté objet, qui permet aux nouvelles classes d'étendre d'autres classes. Le mot-clé Extends est utilisé pour implémenter le concept d'héritage dans le langage de programmation Java. L'héritage fournit essentiellement la réutilisation du code en permettant d'étendre les propriétés et le comportement d'une classe existante par une classe nouvellement définie. Lorsqu'une nouvelle sous-classe (ou une classe dérivée) étend une super classe (ou une classe parente), cette sous-classe hérite de tous les attributs et méthodes de la super classe. La sous-classe peut éventuellement remplacer le comportement (fournir des fonctionnalités nouvelles ou étendues aux méthodes) hérité de la classe parent. En règle générale, une sous-classe ne peut pas étendre plusieurs super classes (par exemple en Java). Par conséquent, vous ne pouvez pas utiliser les extensions pour l'héritage multiple. Pour avoir plusieurs héritages, vous devez utiliser des interfaces.
Quelle est la différence entre la classe abstraite et l'héritage?
Les classes abstraites représentent généralement un concept abstrait ou une entité avec une implémentation partielle ou inexistante. L'héritage permet aux nouvelles classes d'étendre d'autres classes. Comme les classes abstraites ne peuvent pas être instanciées, vous devez utiliser le concept d'héritage pour utiliser les classes abstraites. Sinon, une classe abstraite n'a aucune utilité. Les classes abstraites peuvent contenir des méthodes abstraites et lorsque la classe est étendue, toutes les méthodes (abstraites et concrètes) sont héritées. La classe héritée peut implémenter une ou toutes les méthodes. Si toutes les méthodes abstraites ne sont pas implémentées, alors cette classe devient également une classe abstraite. Une classe ne peut pas hériter de plus d'une classe abstraite (ce n'est pas une qualité de classes abstraites en soi, mais plutôt une restriction d'héritage).