public class Superclass{
void method1(){
method0();
}
void method0(){
System.out.println("superclass");
}
}
public class Subclass extends Superclass{
void method0(){
System.out.println("subclass");
}
}
public class Runclass{
public static void main(String[] args){
new Subclass().method1();
}
}
此代码打印出 - 子类。
假设是
new Superclass().method1();
然后,它会打印出 - superclass
调用的方法是否取决于调用该方法的实例?
最佳答案
它是动态方法调度
(运行时多态性)的示例。
在动态方法中,重写方法的调度调用在运行时解析。
当你打电话时
new Superclass().method1();
输出是 - 父类(super class)
因为父类(super class)没有任何关于子类的信息。
&当你打电话时
new Subclass().method1();
输出是 - 子类
因为当调用重写方法时,java根据调用时引用的对象类型来确定要执行哪个版本的方法。
关于java - 什么决定了重写方法的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16495619/