继承类中具有相同名称的默认方法,没有任何编译错误

时间:2018-07-10 10:19:04

标签: java-8

在Java 8中,类如何使用相同的默认方法实现两个接口。 我无法从子类中继承的不同接口中获得相同默认方法背后的概念。请说明问题。

interface House {
    default String getAddress() {
        return "101 Main Str";
    }
}

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

class MyHouse implements Bungalow, House {

}

public class TestClass {
    public static void main(String[] args) {
        House ci = new MyHouse();  //1
        System.out.println(ci.getAddress()); //2
    }
}

在上面的代码default中的方法getAddress()中存在House接口。在扩展接口Bungalow中,另一个具有相同名称的方法被声明为默认方法

MyHouse如何在没有任何编译错误的情况下实现两个接口(因为在这种情况下,它不知道哪种方法具有优先选择权。)

如果我致电new MyHouse().getAddress();会给出编译错误,但是即使没有从MyHouse类调用方法也应该给出编译错误。

1 个答案:

答案 0 :(得分:1)

似乎答案是here,这里有一个不同的示例,但有一定道理,并且确实与您很接近。

一年1/2来问我完全相同的事情,我会说它在编译时会失败,并指出此答案,以便我可以再次阅读JLS。我想这就是他们决定实施的方式。无需过多考虑,我个人(可能是错误的)认为这至少与直觉相反……