本帖最后由 陈振兴 于 2012-9-21 01:31 编辑
用我的话就是用到什么子类的方法然后就强转为子类对象,然后就可以操作本类中的方法。
我的笔记:
对于对象的调用只能限于编译时类型的方法,如调用运行时类型方法报错。
在上面的例子中:Animal a=new Dog();对象a的编译时类型为Animal,运行时类型为dog。
注意:编译时类型一定要为运行时类型的父类(或者同类型)。
对于语句:Dog d=(Dog)a。将d强制声明为a类型,此时d为Dog(),此时d就可以调用运行时类型。注意:a和d指向同一对象。
程序的运行时,动态类型判定。运行时调用运行时类型,即它调用覆盖后的方法。
动态绑定:
在编译时期:参阅引用型变量所属类中是否有调用方法。如果有,编译通过,不过没有编译失败。
在运行时:参阅对象所属的类中是否有调用方法。
成员函数在多态调用时,编译看左边(主观认为),运行看右边(客观存在)。
静态绑定:静态成员函数特点,无论编译和运行,都参考左边。
主观认为(编译时类型) Animal ai = new Bird();客观存在(运行时类型)
对象名instance of 类名(接口名)
所以我就总结了一句自己的理解,好好理解吧(这可是我读了好几本书才把这个给搞定的啊)! |