java中override(重写)和overload(重载)是不同的,具体的不同我想其他博客什么的已经说的很清楚了,这里主要想探讨一下关于方法调用的具体选择上
在软件构造课上学到:
对于Overload而言,选择哪种方法是在编译阶段根据引用(栈中)的类型而确定的。
对于Override而言,选择哪种方法是在运行阶段根据在堆中的具体对象实例的类型决定的。
由于好奇,做了以下试验
public class Super {
public void print()
{
System.out.println("super");
}
}
public class Sub extends Super {
@Override
public void print()
{
System.out.println("sub");
}
}
public class Test {
public static void main(String[] args) {
Super a = new Super();
Super b = new Sub();
Sub c = new Sub();
a.print();
b.print();
c.print();
}
}
最后控制台输出:
对于b而言,虽然引用值得类型是Super但是实际指向了栈中得Sub对象所以最后在执行的过程中调用了Sub类型的相应方法。