gpt4 book ai didi

java - 使用祖 parent 接口(interface)的默认方法

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

我完全不知道为什么那行不通:

interface Test {

default void doMagic() {
System.out.println("Abracadabra");
}
}

class TestImpl implements Test {

}

class SpecialTestImpl extends TestImpl {

public void doMagic() {
Test.super.doMagic(); // Error: No enclosing instance of the type Test is accessible in scope
}
}

这是不是一些奇怪的 Eclipse 错误消息(它也无法处理 Lamdas,所以也许 Mars 还没有完全准备好 Java 8)?

我可以通过让 SpecialTestImpl 直接实现 Test(这会产生一个警告,因为它是不必要的)或覆盖 TestImpl 中的方法来修复它(出于同样的原因会产生警告)。

那么为什么我不能调用 super 方法呢?

我的猜测是因为如果我能够直接调用 Test.super.doMagic(),在 TestImpl 中实现该方法会破坏 SpecialTestImpl 的 API 即使它不应该。但如果我让 SpecialTestImpl 实现 Test 并以这种方式调用默认方法,情况也是如此。

最佳答案

这不是 Eclipse 错误,而是预期的行为。只需使用 super.doMagic();,它工作正常。您不能调用 Test.super.doMagic(),因为稍后可以在 TestImpl 父类(super class)中重新实现 doMagic()。在这种情况下,TestImpl 实现必须完全覆盖 Test 实现,使其无法访问。

关于java - 使用祖 parent 接口(interface)的默认方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32606652/

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