Uma interface pode estender várias interfaces em Java? Este código parece válido no meu IDE e compila:
interface Foo extends Runnable, Set, Comparator<String> { }
mas ouvi dizer que a herança múltipla não era permitida em Java. Por que parece haver uma exceção para interfaces?
java
inheritance
multiple-inheritance
extends
Prateek
fonte
fonte
Respostas:
Sim, você consegue. Uma interface pode estender várias interfaces, como mostrado aqui:
Uma única classe também pode implementar várias interfaces. E se duas interfaces tiverem um método que defina o mesmo nome e assinatura?
Há um ponto complicado:
A implementação única funciona para ambos :).
Leia meu post completo aqui:
http://codeinventions.blogspot.com/2014/07/can-interface-extend-multiple.html
fonte
void test()
e a interface B comboolean test()
? (Isso é um primo do problema do diamante ?) __ Tentei e o mais sensato acontece: não é permitido se o tipo de retorno for diferente.Uma interface pode estender várias interfaces .
Uma classe pode implementar várias interfaces .
No entanto, uma classe só pode estender uma única classe .
Cuidado como você usa as palavras
extends
eimplements
quando fala sobreinterface
eclass
.fonte
A resposta é: sim.
De acordo com JLS
fonte
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: -
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: -
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: -
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 .
fonte
Você pode estender vários,
Interfaces
mas não pode estender váriosclasses
.O motivo pelo qual não é possível em Java estender várias classes é a má experiência do C ++, onde isso é possível.
A alternativa para herança multiponto é que uma classe pode implementar várias interfaces (ou uma Interface pode estender várias interfaces)
fonte
Eu acho que sua confusão está na herança múltipla, na qual é uma prática ruim fazer isso e em Java isso também não é possível. No entanto, a implementação de múltiplas interfaces é permitida em Java e também é segura.
fonte
por exemplo, dê uma olhada aqui: http://www.tutorialspoint.com/java/java_interfaces.htm
fonte