Qu'est-ce que l'héritage multiple en Java?

POO et héritage

L'utilisation de la programmation orientée objet utilise le concept d'héritage pour étendre les fonctionnalités des objets. Pensez au moment où un programmeur crée un objet. Plus tard, vous pouvez voir que vous devez créer un objet très similaire avec seulement de légères différences (peut-être étendre les fonctionnalités d'un objet précédent dans un nouveau contexte). C'est là que l'héritage apparaît. Un objet qu'un programmeur "dérive" d'un autre objet "base" hérite des méthodes et des variables de la classe et peut ensuite ajouter davantage de fonctionnalités (comme dans l'exemple Java suivant):

classe publique Sphere {public int radius; }

public class Ball étend Sphere {public string color; // Ball ajoute la variable "color", mais utilise également la variable "radius"}

Héritage multiple

À un moment donné, un programmeur peut être tenté de dériver une classe unique de plusieurs classes. C'est ce qu'on appelle "l'héritage multiple" et bien que cela semble utile, cela peut poser des problèmes, tels que l'important "problème des diamants". Ce problème se produit lorsque deux classes héritent de la même classe (telles que les classes B et C dérivent de la classe A), tandis qu'une autre classe (D) dérive de B et C. Lorsqu'un objet D est créé, le système le traite comme un type de classe de base (classe "Ball" ou boule et "Sphère" ou sphère, par exemple). Dans le problème du diamant, le système ne peut pas déterminer de manière décisive la classe D (est-ce le type ABD ou le type ACD?) Cela pose des problèmes.

Java et héritage multiple

En raison de problèmes d'héritage multiple, Java ne le permet pas. Mais en réalité, les classes dérivées de plusieurs classes de base peuvent être obtenues de manière sécurisée en utilisant des "interfaces". Une interface est similaire à une classe, mais elle définit non seulement la structure de la classe, mais également son code réel. Une classe de base qui implémente une interface n'hérite pas nécessairement de ses fonctionnalités: elle ne fait que promettre l'utilisation de sa structure. Puisqu'une classe qui implémente une interface n'hérite pas d'une autre classe (et n'est pas un type de la classe de base), un programmeur peut implémenter plusieurs interfaces en utilisant la même classe.

Exemple: héritage et interfaces

L'exemple suivant montre la différence entre l'héritage d'objets et une interface. Une classe qui hérite d'une autre obtient l'accès à la classe de base car elle devient fondamentalement un type de cette classe (comme dans les classes "Ball" et "Sphere"). Une classe qui implémente une interface ne promet que d’implémenter la structure de son interface: ce n’est pas un type de cette interface:

Interface de base {int doubleA (); // note: aucun code réel n'est défini dans l'interface}

La classe publique B implémente Basic {

public int a;

public int doubleA () // la classe B doit définir la méthode "doubleA ()" pour implémenter "Basic" {return a * 2;}}

Des Articles Intéressants