根据链接中的这个答案https://stackoverflow.com/a/6606490/4816065
在 Sun 的一些 Java 虚拟机实现中,对类实例的引用是指向句柄的指针,句柄本身就是一对指针:一个指向包含对象方法的表,另一个指向代表对象的类型,另一个是从堆中为对象数据分配的内存。
因此,给定两个类 A 和 B 如下:
class A{
void m1(){
System.out.println(" from m1 method ");
}
}
class B extends A {
void m2(){
System.out.println(" from m2 method ");
}
}
在主要方法中,我制作对象如下:
A a1 = new A(); // The dispatch table of a1 contains only method m1.
B b1 = new B(); // The dispatch table of b1 contains method m1 and m2.
A a2 = new B(); // What will the dispatch table of a2 be?
它只有 m1(因为 Object 引用是 A 类型)还是有 m1 和 m2(因为引用的对象是 B 类型)?