gpt4 book ai didi

java - 在子接口(interface)或实现类中访问 Java 默认方法

转载 作者:搜寻专家 更新时间:2023-10-31 20:28:02 25 4
gpt4 key购买 nike

我理解如果一个类重写了一个默认方法,你可以通过下面的方式访问默认方法

interface IFoo {
default void bar() {}
}

class MyClass implements IFoo {
void bar() {}
void ifoobar() {
IFoo.super.bar();
}
}

但是接口(interface)覆盖默认方法的情况呢?父方法是否以任何方式可用?

interface IFoo {
default void bar() {}
}

interface ISubFoo extends IFoo {
// is IFoo.bar available anywhere in here?
default void bar {}
}

class MyClass implements ISubFoo {
// is IFoo.bar available anywhere in here too?

public static void main(String[] args) {
MyClass mc = new MyClass();
mc.bar(); // calls ISubFoo.bar
}
}

Java 用于默认方法的措辞类似于用于类的措辞,否则会造成混淆/误导。子接口(interface)“继承”默认方法,并且可以“覆盖”它们。所以看起来 IFoo.bar 应该可以在某处访问。

最佳答案

您可以更上一层楼,因此 IFoo.bar() 在 ISubFoo 中可用 IFoo.super.bar()

interface IFoo {
default void bar() {}
}

interface ISubFoo extends IFoo {
// is IFoo.bar available anywhere in here?
// Yes it is
default void bar {
IFoo.super.bar()
}
}

class MyClass implements ISubFoo {
// is IFoo.bar available anywhere in here too?
// Not it is not

public static void main(String[] args) {
MyClass mc = new MyClass();
mc.bar(); // calls ISubFoo.bar
}
}

关于java - 在子接口(interface)或实现类中访问 Java 默认方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26260145/

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