来自https://dzone.com/articles/interface-default-methods-java
Java 8引入了“默认方法”或(Defender方法)新功能,该功能使开发人员可以在不破坏现有接口实现的情况下向接口添加新方法。它提供了允许接口定义实现的灵活性,该接口定义实现将在具体类无法为该方法提供实现的情况下默认使用。
public interface A {
default void foo(){
System.out.println("Calling A.foo()");
}
}
public class ClassAB implements A {
}
人们首次听到新功能时会询问一个关于默认方法的常见问题:
如果该类实现两个接口,并且这两个接口都定义一个具有相同签名的默认方法,该怎么办?
示例来说明这种情况:
public interface A {
default void foo(){
System.out.println("Calling A.foo()");
}
}
public interface B {
default void foo(){
System.out.println("Calling B.foo()");
}
}
public class ClassAB implements A, B {
}
此代码无法编译,结果如下:
java: class Clazz inherits unrelated defaults for foo() from types A and B
为了解决这个问题,在Clazz中,我们必须通过覆盖冲突的方法来手动解决它:
public class Clazz implements A, B {
public void foo(){}
}
但是,如果我们想从接口A调用方法foo()的默认实现而不是自己实现,该怎么办?
可以如下引用A#foo():
public class Clazz implements A, B {
public void foo(){
A.super.foo();
}
}