错误使用接口:类Main从类型first和second继承了display()的不相关默认值



不明白为什么我得到这个代码的编译错误。比如我在预测输出时漏掉了Interface的哪个属性

public class Main implements first, second
{
public static void main(String[] args) {
Main object = new Main();
object.display();
}
}
interface first {
default public void display() {
System.out.println("This is the display function of interface first");
}
}
interface second {
default public void display() {
System.out.println("This is the display function of interface second");
}
}

Java是一种非常直接和显式的语言,没有给不确定性留下太多空间。这就是为什么基本上所有模棱两可的东西都会给你一个编译错误。

你必须告诉Java你想要使用哪个display方法:

public class Main implements first, second {
@Override
public void display() {
first.super.display();
// or: second.super.display();
}
}

您必须在Main类中定义display()方法的实现。
像这样:

public class Main implements first, second
{
@Override
public void display() {
System.out.println("This is the display function of main");
}
public static void main(String[] args) {
Main object = new Main();
object.display();
}
}

或者如果您想使用firstsecond接口中定义的方法之一,您可以定义它

public class Main implements first, second
{
@Override
first.super.display();
public static void main(String[] args) {
Main object = new Main();
object.display();
}
}

正如Benjamin所提到的

除非您在Main类中重写它,否则Java无法知道在这种情况下调用什么方法:)

最新更新