Java 动态方法调用
在Java中,如果方法重写只是一种名字空间的编写,那么它最多是让人感到有趣,但没有实际价值,但情况并非如此。方法重写构造成了Java最大的一个概念基础:动态方法调度(dynamic method dispatch)。动态方法调度是一种机制,借助于这种机制,对一个已经重写的方法的调用将在运行时,而不是在编译时解析。动态方法调度非常重要,因为这关系到Java如何实现运行多态性的问题。我们知道,超类引用变量可以引用子类对象,Java使用这个事实来解决在运行时对重写方法的调用。下面是运行原理:当一个超类引用调用一个重写方法时,Java根据在调用时被引用对象的类型执行哪个版本的方法。换句话说,是被引用对象的类型(不是引用变量的类型)决定将执行哪个版本的重写方法。因此,如果说超类包含一个被子类重写的方法,那么当通过超类引用变量来引用不同类型的对象时,就会执行那个方法的不同版本。演示如下:
public class ClassA {
void callme(){
System.out.println("Inside A's callme method");
}
}
public class ClassB extends ClassA{
void callme(){
System.out.println("Inside B's callme method");
}
}
public class ClassC extends ClassA{
void callme(){ </