首页 >Java >java教程 >当 Java 中默认方法被重写时,如何显式调用它的实现?

当 Java 中默认方法被重写时,如何显式调用它的实现?

DDD
DDD原创
2024-12-01 09:30:15543浏览

How Can You Explicitly Invoke a Default Method's Implementation in Java When It's Overridden?

重写 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn