Desde la página de documentación de Oracle sobre el tipo de herencia múltiple, podemos encontrar la respuesta precisa aquí . Aquí deberíamos conocer primero el tipo de herencia múltiple en Java:
- Herencia múltiple del estado.
- Herencia múltiple de implementación.
- Herencia múltiple de tipo.
Java "no admite la herencia múltiple de estado, pero admite la herencia múltiple de implementación con métodos predeterminados desde el lanzamiento de Java 8 y la herencia múltiple de tipo con interfaces.
Entonces aquí surge la pregunta para el "problema del diamante" y cómo Java lidia con eso:
En caso de herencia múltiple de implementación, el compilador de Java da un error de compilación y le pide al usuario que lo arregle especificando el nombre de la interfaz. Ejemplo aquí: -
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 {
}
Así que aquí obtendremos un error como: - la interfaz D hereda los valores predeterminados no relacionados para el método () de los tipos B y C, la interfaz D se extiende B, C
Puedes arreglarlo como: -
interface D extends B, C {
@Override
default void method() {
B.super.method();
}
}
- En la herencia múltiple de tipo java lo permite porque la interfaz no contiene campos mutables y solo una implementación pertenecerá a la clase, por lo que java no da ningún problema y le permite hacerlo.
En conclusión, podemos decir que Java no admite la herencia múltiple de estado, pero sí admite la herencia múltiple de implementación y la herencia múltiple de tipo .