Java JVM不需要实现所有的接口方法吗?

Java JVM不需要实现所有的接口方法吗?,java,grails,groovy,Java,Grails,Groovy,我正在尝试groovy,所以我在groovy中编写了一个示例HelloWorld程序,并对其进行了编译&运行,效果很好,当我看到使用JAD反编译器编译的代码时,我的HelloWorld程序实现了GroovyObject接口,但它没有实现该接口中的所有方法,所以这意味着只有java编译器强制我们实现接口中的所有方法,但JVM不需要。我说得对吗 这是反编译的groovy代码: import groovy.lang.GroovyObject; import groovy.lang.MetaClass;

我正在尝试groovy,所以我在groovy中编写了一个示例HelloWorld程序,并对其进行了编译&运行,效果很好,当我看到使用JAD反编译器编译的代码时,我的HelloWorld程序实现了GroovyObject接口,但它没有实现该接口中的所有方法,所以这意味着只有java编译器强制我们实现接口中的所有方法,但JVM不需要。我说得对吗

这是反编译的groovy代码:

import groovy.lang.GroovyObject;
import groovy.lang.MetaClass;
import org.codehaus.groovy.runtime.callsite.CallSite;

public class Helloworld_1   implements GroovyObject {
  public Helloworld_1()  {
    Helloworld_1 this;
    CallSite[] arrayOfCallSite = $getCallSiteArray();
    MetaClass localMetaClass = $getStaticMetaClass();
    this.metaClass = localMetaClass;  }

  public static void main(String... args){
    CallSite[] arrayOfCallSite =  $getCallSiteArray();
    arrayOfCallSite[0].callStatic(Helloworld_1.class, "Hello World");
  }  
 static {}
}

请任何人帮助……

我可以在使用Groovy控制台时看到GroovyObject的实现。为了显示生成的源代码,我选择脚本,检查Ast,并在阶段结束时选择类生成。我还可以通过选择bytecode选项卡来查看生成的字节码


我相信负责实现GroovyObject方法的源代码位于org.codehaus.groovy.classgen.Verifier中。有一个名为addGroovyObjectInterfaceAndMethods的方法。您可以在中找到源代码。

我认为如果将问题拆分为两个会更好。我将问题拆分为两个。$getCallSiteArray也没有声明。我上面发布的代码是反编译代码[我使用了JAD反编译器]我尝试使用jd gui进行反编译。得到了类似的结果,调用了一些未声明的方法。也许groovy会使用代理来添加功能。谢谢您的回答。我在groovy控制台中看到了AST转换,但是AST转换发生在编译时,那么我们编译的代码为什么在JVM中工作呢?在编译源代码时,groovy使用ASM库生成方法,包括GroovyObject的实现。生成的类应该是有效的JVM类。我以前没用过JAD。尝试使用JDK中的javap工具,例如javap-p-cmyclass,您将看到接口中的所有方法都存在。噢,很好。谢谢您的帮助。