在中重写java:how method 呼叫已解决?

dm7nw8vv  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(265)
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();
    }
}

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

bvpmtnay

bvpmtnay1#

此调用将在运行时解析。而i类的process()方法将变得异常强大。超类引用引用的是子类对象。因此,当您使用引用子类对象的超类引用调用方法时,总是会执行子类方法。

kqhtkvqz

kqhtkvqz2#

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

oymdgrw7

oymdgrw73#

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

相关问题