在C++中, 多态是通过每个对象维护的一个虚拟表 VTABLE 来执行的.在JAVA中也是这样吗?看<深入JAVA
虚拟机>中说的每个对象维护一个自己的方法表.假想JVM时这样实现的:这个方法表是函数指针数组.每个元素对应一个方法入口: 子类对象中新定义的方法和继承过来的方法(未覆盖的+已经覆盖的).并且这个对象中的每个成员都带了标记(自己的和继承过来的,这样当用超类引用来指向这个子类实例的时候,编译器能知道哪些方法这个超类引用可以调用,而哪些却不可以).当子类覆盖了超类的某个方法后, 是不是这样:
在这个方法表中,用子类覆盖后的新的方法的地址覆盖这个继承过来的同名的方法,但是标记没有改变,还是从父类继承过来的.这样当把一个子类实例赋值给超类引用后,接口变窄.当调用那个重载函数的时候,就会转到新方法的定义区代码执行,从而实现了多态...不知道这样理解对不对? 请路过的大侠高手指点. 偶就是想把JAVA的多态机制搞懂!!!