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是否会调用哪个进程方法或是编译器?给出答案的理由。
答案 0 :(得分:0)
该方法在运行时解析,您正在扩展一个类,这意味着该类可以具有与父类相同的方法,但是引用在运行时被解析。
答案 1 :(得分:0)
这称为运行时多态。将执行类I的方法。始终在运行时检查对象的引用类型。父类中不存在原始进程方法然后覆盖它将产生错误。
答案 2 :(得分:0)
此调用将在运行时解析。并且I类的process()方法将被执行。 Superclass引用引用子类对象。因此,当您使用引用子类对象的超类引用调用该方法时,将始终执行子类方法。