Na página de documentação da Oracle sobre o tipo de herança múltipla, podemos encontrar a resposta precisa aqui . Aqui devemos primeiro conhecer o tipo de herança múltipla em java: -
- Herança múltipla de estado.
- Herança múltipla de implementação.
- Herança múltipla do tipo.
Java "não suporta herança múltipla de estado, mas suporta herança múltipla de implementação com métodos padrão desde o lançamento do java 8 e herança múltipla de tipo com interfaces.
Então aqui surge a questão do "problema do diamante" e como o Java lida com isso:
No caso de herança múltipla da implementação, o compilador java fornece erro de compilação e pede ao usuário para corrigi-lo, especificando o nome da interface. Exemplo aqui: -
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 {
}
Então, aqui teremos erro como: - a interface D herda padrões não relacionados para o método () dos tipos B e C, a interface D estende B, C
Você pode corrigi-lo como: -
interface D extends B, C {
@Override
default void method() {
B.super.method();
}
}
- Na herança múltipla do tipo, o java permite porque a interface não contém campos mutáveis e apenas uma implementação pertence à classe, portanto o java não apresenta nenhum problema e permite que você o faça.
Em conclusão, podemos dizer que o java não suporta herança múltipla de estado, mas suporta herança múltipla de implementação e herança múltipla de tipo .