不明白为什么我得到这个代码的编译错误。比如我在预测输出时漏掉了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();
}
}
或者如果您想使用first
或second
接口中定义的方法之一,您可以定义它
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无法知道在这种情况下调用什么方法:)