java多态的向上转型与向下转型(与编译时类型与运行时类型有关)

1.编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。

         当编译时类型和运行时类型不一致时,就会出现所谓的多态。

 因为子类是一个特殊的父类,因此java允许把一个子类对象直接赋给一个父类的引用变量,无需任何类型转换(向上转型)

 引用变量在编译阶段只能通过编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法。因此,编写java代码时,引用变量只能

调用声明该变量时所用类里包含的方法。

 2.编写程序时,引用变量只能调用它编译时类型的方法,而不能调用运行时类型的方法,即使实际所引用的对象确实包含该方法。

         如果需要让这个引用变量调用它运行时类型的方法,也就是要把一个父类对象赋给子类对象时,则必须要把它强制类型转换成运行时类型。(向下转型)

      SubClass sb=(SubClass)ploymophicBc

  注意:引用类型之间的转换只能在有继承关系的两个类型之间进行。如果试图把一个父类实例转换成子类类型,则这个对象必须实际上是子类实例才行(即编译时类型为父类类型,而运行时类型为子类类型)

 使用instanceof运算符先进行判断是否可以成功转换,增强程序健壮性

原文地址:https://www.cnblogs.com/wxw7blog/p/7052949.html