Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida Polimorfismo 2

Mais uma questão...

O código abaixo compila normalmente e imprimirá "101 Smart Str".

Como a classe MyHouse não sobrescreveu nenhum dos dois métodos, como ele soube qual método chamar?

interface House{

    public default String getAdress(){
        return "101 Main Str";
    }
}

interface Bungalow extends House{
    public default String getAdress(){
        return "101 Smart Str";
    }
}

class MyHouse implements Bungalow, House{


}

public class A{     

    public static void main(String[] args) {                   
        House ci = new MyHouse();
        System.out.println(ci.getAdress());
    } 

}
2 respostas
solução!

Este é justamente o objetivo de métodos default para interfaces em Java. Visto que MyHouse não implemente getAdress, ele herda o método default da interface mais especializada, neste caso, Bungalow.

Acho que entendi, se a interface Bungalow não herdasse de House, aí o código não compilaria pois a classe A não saberia qual método chamar. Porém nesse caso, Bungalow é uma interface mais específica, filha de House, então o método de Bungalow é executado.

Obrigado Juliano :)