3
respostas

Herança múltipla na interface?

Aprendemos que extends estende uma classe abstrata, e apenas uma, sem a possibilidade de herança múltipla, porem em uma interface como a Connection que foi citada no exemplo estende 2 classes. A regra é diferente para interface? Ou seja, somente a interface pode ter herança múltipla?

3 respostas

Existe apenas herança simples no Java!

No caso da interface elas implementam, não herdam. Você pode implementar mais que uma interface.

Nathan acho que você não entendeu minha pergunta: Sobre a interface abaixo:

public interface Connection extends Wrapper, AutoCloseable {

Regra: extends = Herança simples para Classes Regra: implements = Varias podem ser implementadas

Minha pergunta: Quando é uma Interface pode fazer extends Wrapper, AutoCloseable. Pois entendi no curso que extends seria para herança de uma classe abstrata, contudo no exemplo as duas não são classes e sim outras interfaces, o melhor não seria implements?

Marcos, beleza?

Como vocês já comentaram, o Java limita-se a herança simples quando falamos de classes, porém a grosso modo podemos dizer que Interface não é uma classe e essa por sua vez permite sim que utilizemos o extend com mais de uma outra interface.

No exemplo da sua pergunta, temos: public interface Connection extends Wrapper, AutoCloseable {

Basicamente Connection está definindo que qualquer classe que a implementa-la, terá também que implementar os métodos declarados em Wrapper e AutoCloseable .

Reforçando: public class Teste implements Connection { -> nesse exemplo, a classe Teste terá que implementar os métodos não apenas de Connection como também os de Wrapper e AutoCloseable.

Sobre ser melhor implements ou extends, poderiamos sim usar public class Teste implements InterfaceA, InterfaceB, InterfaceC {, mas imagine que as interfaces A e B possam ser usadas separadas em outras partes do código, mas dado algum cenário específico, a Interface C depende de métodos da A e B. Para evitarmos reescrita de código ou problemas caso alguém esqueça de implementar A e B toda vez que implementar C, é mais seguro e prático criarmos a C como public interface InterfaceC extends InterfaceA, InterfaceB {, garantindo que todo mundo que implementar C terá que implementar os métodos de A e B também!

No Java uma interface não pode implementar outra interface, apenas estender: Interfaces cannot be instantiated—they can only be implemented by classes or extended by other interfaces. https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html

Espero não ter deixado mais confuso ainda o tema! haha