向上转型,向下转型

  有两个类, 父类 Father, 子类 Son

 

向上转型

  把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转换

  父类引用 f1 指向 子类对象

Father f1 = new Son();

 

向下转型

   当用父类变量指向子类类型的时候,变量只有父类的方法而不能调用子类的方法,若想调用子类的方法就要把父类变量转换为子类变量(向下转型)

   把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转换   

  f1 指向 Son对象,f1 前面的(Son)必须加上,进行强制转换。这里向下转型是安全的 a1 指向的是子类对象

Father f1 = new Son();
Son s1 = (Son)f1;

  不安全的向下转型,编译无错但会运行会出错

  当父类变量转换为一个与真实对象不相符的子类变量的时候,就会抛出ClassCastException,所以向下转型是不安全的,

  正确的做法是在强制类型转换之前先使用 Instance of关键字进行判断转型后的类型和真实对象的类型是否一致,一致才执行类型转换操作;

Father a2=new Son();
Son c=(Son)a2;

  运行出错

Exception in thread "main" java.lang.ClassCastException:

 

  

 

posted @ 2020-10-25 12:24  抽象Java  阅读(112)  评论(0编辑  收藏  举报