假设我们有两个接口,它们都有具有相同签名的方法 display()。到目前为止,一切都很好。现在我为其中之一定义一个默认实现。现在,当我想在我的类中实现它们时,它给了我一个语法错误。谁能帮我理解原因吗?
例如下面的代码,
interface Show1 {
default void display() {
System.out.println("hello");
}
}
interface Show2 {
void display();
}
public class Person implements Show1, Show2 {
public static void main(String args[]) {
Person p = new Person();
p.display();
}
}
我认为它会打印 hello 因为我们有默认的实现。而且由于接口中的两个方法彼此之间没有任何干扰。 但它给了我语法错误。如果您能帮助我找到此行为背后的原因,我将不胜感激。
这是因为 Java 的设计者决定,如果您有两个或多个具有相同方法签名的接口,并且一个或多个具有默认实现,那么您必须自己实现它。
该实现可以简单地调用其中一个接口的默认实现。
例如:
interface Show1 {
default void display() {
System.out.println("hello");
}
}
interface Show2 {
void display();
}
public class Person implements Show1, Show2 {
public static void main(String args[]) {
Person p = new Person();
p.display();
}
@Override
public void display() {
Show1.super.display();
}
}
这不是偶然发生的事情,这是明确且有意设计的事情