gpt4 book ai didi

java - Java 8 中钻石探测解析或多重继承的规则

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:32:29 24 4
gpt4 key购买 nike

在 Java 中,一个类只能扩展一个父类,但可以实现多个接口(interface)。和Java 8 接口(interface)引入默认方法,一个类有可能继承多个通过实现具有相同默认方法的 2 个接口(interface)具有相同签名的方法这会产生 C++ 中的菱形问题

以下代码的输出示例

new C().hello(); is 

This is Second

   public interface First {

default void hello(){
System.out.println("This is First");
}
}

public interface Second extends First {

default void hello(){
System.out.println("This is Second");
}
}

public class MyClass implements First,Second {

public static void main(String[] args) {
new MyClass().hello();
}
}

Java用来解决菱形继承(钻石问题)的解决规则是什么?一个简单的答案,比如谁优先,什么时候优先。

最佳答案

当一个类从多个地方(另一个类或接口(interface))继承具有相同签名的方法时应遵循以下规则:

  • 类(class)总是赢家。类或父类(super class)中的方法声明优先于任何默认方法声明。
  • 否则,子接口(interface)获胜:在最具体的默认提供中具有相同签名的方法接口(interface)被选中。 (例如,在您的案例中,来自 Second 接口(interface)的方法应该作为 Second extends First 运行)。
  • 最后,如果选择仍然不明确,则继承自多个接口(interface)的类必须通过覆盖它并调用显式所需的方法。

关于java - Java 8 中钻石探测解析或多重继承的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42222688/

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