在java中重写:如何解决方法调用?

时间:2017-07-14 15:58:00

标签: java method-overriding

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是否会调用哪个进程方法或是编译器?给出答案的理由。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这称为运行时多态。将执行类I的方法。始终在运行时检查对象的引用类型。父类中不存在原始进程方法然后覆盖它将产生错误。

答案 2 :(得分:0)

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