在Java中调用默认方法
问题:
是否可以调用默认方法当方法被覆盖或与多个接口中的实现冲突时,该方法的实现如何?考虑以下代码:
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() 可以使用语法 A.super.foo() 显式调用。此语法允许您访问该方法的原始实现,即使该方法已被覆盖或由于冲突而不可用。
示例:
要调用 A.从 B 类中的方法 afoo() 中调用 foo(),可以使用以下代码:
public void afoo() { A.super.foo(); }
额外使用:
super 语法也可以是用于从其他接口访问默认方法。例如,如果接口 C 也有一个默认方法 foo(),则可以按如下方式访问类 B 中的两个实现:
public void bah() { A.super.foo(); // Original `foo()` from interface `A` C.super.foo(); // Original `foo()` from interface `C` }
通过使用 super 语法,您可以有选择地选择要调用哪个默认实现或者在您自己的方法中组合多个实现。
以上是当重写或冲突时如何调用 Java 中的默认方法?的详细内容。更多信息请关注PHP中文网其他相关文章!