为什么我们不能实现两个具有相同签名方法的接口,其中一个在java中有默认实现?

问题描述 投票:0回答:1

假设我们有两个接口,它们都有具有相同签名的方法 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 overriding interface-implementation
1个回答
0
投票

这是因为 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();
    }
}

这不是偶然发生的事情,这是明确且有意设计的事情

© www.soinside.com 2019 - 2024. All rights reserved.