重写 Java 中的默认方法
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? } }
要调用 B 类中 foo 的默认实现,可以使用 A.super.foo()。
public void afoo() { A.super.foo(); }
这个语法允许您访问原始默认实现,即使该方法已在实现类中被重写。
如果多个接口具有具有相同签名的默认方法,例如接口 A 和 C 都具有 foo方法中,您可以选择要调用的特定默认实现:
public class ChildClass implements A, C { @Override public void foo() { A.super.foo(); // Accesses original foo() from A C.super.foo(); // Accesses original foo() from C } }
此语法提供了选择所需默认实现的灵活性,或者您甚至可以将这两种实现合并到您自己的自定义 foo 中 方法。方法调用语法在 Java 语言规范第 15 章中有正式描述。
以上是当 Java 中默认方法被重写时,如何显式调用它的实现?的详细内容。更多信息请关注PHP中文网其他相关文章!