java中的重写:如何解析方法调用?

java中的重写:如何解析方法调用?,java,overriding,Java,Overriding,这段代码是基于java中的重写。但是我对这个问题有疑问。当我们使用y引用变量调用process方法时,那么该方法调用是在运行时解决的还是由编译器解决的?请帮助我解决这个问题,JVM是否解决了要调用的process方法,或者是编译器?给出答案的原因。该方法在运行时解析,您正在扩展一个类,这意味着该类可以具有与父类相同的方法,但引用在运行时解析。这称为运行时多态性。此处将执行类I的方法。始终在运行时检查对象的引用类型。假设父类中不存在进程方法,则重写,它将生成错误。此调用将在运行时解决。I类的pro

这段代码是基于java中的重写。但是我对这个问题有疑问。当我们使用y引用变量调用process方法时,那么该方法调用是在运行时解决的还是由编译器解决的?请帮助我解决这个问题,JVM是否解决了要调用的process方法,或者是编译器?给出答案的原因。

该方法在运行时解析,您正在扩展一个类,这意味着该类可以具有与父类相同的方法,但引用在运行时解析。

这称为运行时多态性。此处将执行类I的方法。始终在运行时检查对象的引用类型。假设父类中不存在进程方法,则重写,它将生成错误。

此调用将在运行时解决。I类的process()方法将被破坏。超类引用引用子类对象。因此,当您使用引用子类对象的超类引用调用该方法时,将始终执行子类方法

发帖时请花时间格式化您的代码。没有任何缩进很难阅读。此外,这个主题已经被讨论过多次了——至少有一些应该只通过测试应用程序的输出来回答。可能的重复项你试过运行代码吗?是的。我试过运行代码,但没有显示任何错误。谁提到过错误?如果你运行了你的代码,你应该有你的问题的答案。
class Y{
    void process(){
        System.out.println("In Y process()");
    }
}

class I extends Y{
    void process(){
        System.out.println("In I process()");
    }

    public static void main(String[] args){
        Y y = new I();
        y.process();
    }
}