Ste*_* S. 5 java eclipse java-8
我完全迷失了为什么那不起作用:
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
}
}
Run Code Online (Sandbox Code Playgroud)
这是一些奇怪的Eclipse错误消息(它也无法应对Lamdas,所以也许Mars还没有完全准备好Java 8)?
我可以通过直接让SpecialTestImpl工具Test(它产生警告,因为它是不必要的)或覆盖方法来解决它(由于TestImpl相同的原因产生警告).
那么为什么我不能调用超级方法呢?
我的猜测是因为如果我能够Test.super.doMagic()直接调用,实现该方法TestImpl会破坏API,SpecialTestImpl即使它不应该.但是如果我让SpecialTestImpl实现Test并以这种方式调用默认方法也是如此.
Tag*_*eev 11
这不是Eclipse的错误,它是预期的行为.只是使用super.doMagic();,它工作正常.你不能再调用Test.super.doMagic()as,doMagic()可以在TestImpl超类中重新实现.在这种情况下,TestImpl实现必须完全影响Test实现,使其无法访问.
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |