为什么我们需要 super 关键字来调用默认接口方法?

Ash*_*lla 5 java oop interface super

在下面的代码中,当我有一个类实现两个具有相同默认方法签名的接口时,它要求我重写它。但在重写方法中为什么我必须使用 super 关键字来调用默认方法。

package practice;



interface interA{

public default void AImp(){
    System.out.println("Calling Aimp from interA");
}
}


interface interB{

public default void AImp(){
    System.out.println("Calling Aimp from interB");
}
}

public class Practice implements interA,interB {

public static void main(String[] args) {


Practice inter = new Practice();

    inter.AImp();

}

@Override
public void AImp() {

    interA.super.AImp();
}
}
Run Code Online (Sandbox Code Playgroud)

我可以使用下面的代码执行相同的操作:

@Override
public void AImp() {
    interA inter = new Practice();
    inter.AImp();
}
Run Code Online (Sandbox Code Playgroud)

Tal*_*nac 0

您不仅覆盖了,还实现了具有相同命名方法的接口。更准确地说,您已经实现了两个接口,并且无论您想在 AImpl 中运行什么代码,都必须解决钻石问题。由于钻石层次结构,IDE 要求您覆盖。一旦您提供了代码,interA.super将用作导航到所需代码的方式。