gpt4 book ai didi

java - 在 Java 中显式调用默认方法

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:13 24 4
gpt4 key购买 nike

Java 8 引入 default methods提供扩展接口(interface)的能力,而无需修改现有的实现。

我想知道当该方法已被覆盖或由于不同接口(interface)中的默认实现冲突而不可用时,是否可以显式调用该方法的默认实现。

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 的方法调用 A.foo()

最佳答案

根据 this article您可以使用

访问接口(interface) A中的默认方法
A.super.foo();

可以按如下方式使用(假设接口(interface) AC 都有默认方法 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
}
}

AC 都可以具有 .foo() 方法,并且可以选择特定的默认实现,或者您可以使用其中一个(或两者)作为新 foo() 方法的一部分。您还可以使用相同的语法来访问实现类中其他方法中的默认版本。

方法调用语法的正式描述可以在 chapter 15 of the JLS 中找到。 .

关于java - 在 Java 中显式调用默认方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41263433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com