为什么不能用super调用间接超级接口方法?

时间:2015-07-24 13:31:38

标签: java oop jvm invoke super

考虑以下示例(使用自定义JVM语言):

interface A { void foo() = println "A0" }
interface B extends A { override void foo() = println "A" }
interface C { void foo() = println "B" }

class D implements B, C
{
    override void foo() = super[A].foo // A.super.foo
}

这会被java编译器拒绝,因为A不是D的直接超类型。由于我的编程语言目前没有捕获到这个错误,我设法得到了一个JVM验证错误:

java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
  Location:
    dyvil/test/Main$C.foo()V @1: invokespecial
  Reason:
    Error exists in the bytecode
  Bytecode:
    0000000: 2ab7 0015 b1

为什么这是JVM的问题?我总是invokespecial说'调用这个实例方法,但不做动态调度'?该问题是否与类文件中的SUPER访问标志有关?最后,是否有解决方法?

0 个答案:

没有答案