在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类调用方法也应该给出编译错误。
答案 0 :(得分:1)
似乎答案是here,这里有一个不同的示例,但有一定道理,并且确实与您很接近。
一年1/2来问我完全相同的事情,我会说它在编译时会失败,并指出此答案,以便我可以再次阅读JLS。我想这就是他们决定实施的方式。无需过多考虑,我个人(可能是错误的)认为这至少与直觉相反……