本帖最后由 草帽 于 2013-7-7 11:32 编辑
楼主问题中我想并不只是强制类型转换的问题而且有多态的问题。涉及到动态绑定(池绑定)的问题,动态绑定就是在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用期对应的方法。
程序中的方法都存于方法区,当在执行的时候new的哪个对象就调用谁覆写后的方法。
也就是在对象(堆内存)的内部有一个方法的指针来指向方法,但当nuw出对象后该指针就随之变化指向覆写后的方法。也就是动态绑定,只有在运行的时候才能确定所调用的方法。
((用池解释就是,在编译时刻,会生成一张虚拟表,来记录所有覆盖的方法,没有被覆盖的方法是不会记录到这张表的。若一个父类引用调用了没有覆盖的子类方法,那么是不符合该表的,那么编译时刻就会报错。在执行程序的时候,虚拟机会去这张虚拟表中找覆盖的方法,比如引用中实际上存的是一个子类对象引用,那么就会去找子类中的相应的覆盖的方法来执行。))
|
|