Java 8引入了默认方法,以提供扩展接口的功能,而无需修改现有的实现。
我想知道当由于不同接口中的默认实现冲突而导致该方法的默认实现被重写或不可用时,是否可以显式调用该方法的默认实现。
interface A {
default void foo() {
System.out.println("A.foo");
}
}
class B implements A {
@Override
public void foo() {
System.out.println("B.foo");
}
public void afoo() {
// how to invoke A.foo() here?
}
}
考虑上面的代码,您将如何A.foo()
从B类的方法调用?
按照这篇文章,你在界面访问默认方法A
使用
A.super.foo();
这可用于如下(假设接口A
和C
两个有默认的方法foo()
)
public class ChildClass implements A, C {
@Override
public void foo() {
//you could completely override the default implementations
doSomethingElse();
//or manage conflicts between the same method foo() in both A and C
A.super.foo();
}
public void bah() {
A.super.foo(); //original foo() from A accessed
C.super.foo(); //original foo() from C accessed
}
}
A
并且C
可以同时具有.foo()
方法,可以选择特定的默认实现,也可以将一个(或两个)用作新foo()
方法的一部分。您还可以使用相同的语法在实现类中的其他方法中访问默认版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句