gpt4 book ai didi

java - 为什么实现接口(interface)(使用默认方法)的顺序在 Java 8 中很重要?

转载 作者:太空狗 更新时间:2023-10-29 22:55:59 25 4
gpt4 key购买 nike

众所周知,多个 interfaces可以用Java实现。它们的执行顺序重要吗?我的意思是,正在执行 B,C 与 Java 8 中的 C、B 相同?我的测试显示顺序确实很重要 - 但谁能解释这背后的逻辑?

public interface A {
public default void display() {
System.out.println("Display from A");
}
}

public interface B extends A {
public default void display() {
System.out.println("Display from B");
}
}

public interface C extends A {
public void display();
}

public interface D extends B, C {

}

上面的代码工作正常。如果我改变顺序 B, CC, B ,它会给出一个错误:The default method display() inherited from B conflicts with another method inherited from C.

public interface D extends C, B {

}

编辑

我正在使用 Eclipse(Mars)。 JDK jdk1.8.0_51 . JRE jre1.8.0_60 .

最佳答案

无论哪种方式,都应该有一条错误消息。当我使用 jdk 1.8.0_31 时,无论接口(interface)的顺序如何,我都会收到以下错误:

The default method display() inherited from A.B conflicts with another method inherited from A.C

解决方案是覆盖 D 中的 display() 甚至只是告诉编译器要使用哪个父类(super class)的实现:

public interface D extends B, C {
default void display(){
B.super.display();
}
}

或者重做display()抽象

interface D extends B, C {
public void display();
}

如果您确实在使用比我更高的版本时遇到此错误,那么是否值得提交错误报告?

关于java - 为什么实现接口(interface)(使用默认方法)的顺序在 Java 8 中很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32663581/

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