1.编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。
当编译时类型和运行时类型不一致时,就会出现所谓的多态。
因为子类是一个特殊的父类,因此java允许把一个子类对象直接赋给一个父类的引用变量,无需任何类型转换(向上转型)
引用变量在编译阶段只能通过编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法。因此,编写java代码时,引用变量只能
调用声明该变量时所用类里包含的方法。
2.编写程序时,引用变量只能调用它编译时类型的方法,而不能调用运行时类型的方法,即使实际所引用的对象确实包含该方法。
如果需要让这个引用变量调用它运行时类型的方法,也就是要把一个父类对象赋给子类对象时,则必须要把它强制类型转换成运行时类型。(向下转型)
SubClass sb=(SubClass)ploymophicBc
注意:引用类型之间的转换只能在有继承关系的两个类型之间进行。如果试图把一个父类实例转换成子类类型,则这个对象必须实际上是子类实例才行(即编译时类型为父类类型,而运行时类型为子类类型)
使用instanceof运算符先进行判断是否可以成功转换,增强程序健壮性