Depuis la page de documentation d'Oracle sur le type d'héritage multiple, nous pouvons trouver la réponse précise ici. Ici, il faut d'abord connaître le type d'héritage multiple en java :-
- Héritage multiple de l'état.
- Héritage multiple de l'implémentation.
- Héritage multiple du type.
Java "ne prend pas en charge l'héritage multiple de l'état, mais il prend en charge l'héritage multiple de l'implémentation avec des méthodes par défaut depuis la version 8 de java et l'héritage multiple du type avec les interfaces.
Ensuite, la question se pose pour le "problème diamant" et comment Java le gère :-
-
Dans le cas de l'héritage multiple de l'implémentation, le compilateur java renvoie une erreur de compilation et demande à l'utilisateur de la corriger en spécifiant le nom de l'interface. Exemple ici :-
interface A {
void method();
}
interface B extends A {
@Override
default void method() {
System.out.println("B");
}
}
interface C extends A {
@Override
default void method() {
System.out.println("C");
}
}
interface D extends B, C {
}
Donc ici nous obtiendrons une erreur comme :- interface D hérite de méthodes par défaut non reliées de types B et C interface D extends B, C
Vous pouvez le corriger ainsi :-
interface D extends B, C {
@Override
default void method() {
B.super.method();
}
}
- Dans l'héritage multiple du type, java le permet car une interface ne contient pas de champs mutables et une seule implémentation appartiendra à la classe, donc java ne pose aucun problème et vous permet de le faire.
En conclusion, nous pouvons dire que java ne prend pas en charge l'héritage multiple de l'état mais qu'il prend en charge l'héritage multiple de l'implémentation et l'héritage multiple du type.