gpt4 book ai didi

java-8 - 继承类中的默认同名方法,没有任何编译错误

转载 作者:行者123 更新时间:2023-12-05 05:15:48 25 4
gpt4 key购买 nike

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

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
}
}

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

MyHouse 类如何在没有任何编译错误的情况下实现这两个接口(interface)(因为它不知道哪个方法优先,在这种情况下实现应该失败。)

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

最佳答案

似乎答案是here ,其中有一个不同的例子,但有点道理,而且非常接近你的例子。

每年有 1/2 次问我完全相同的事情,我会说它会在编译时失败并指出这个答案,这样我就可以再次阅读 JLS。我想这就是他们决定实现它的方式。没有想太多,我个人(可能是错误的)认为这至少是违反直觉的......

关于java-8 - 继承类中的默认同名方法,没有任何编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51262724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com