向上转型:
- 从子类到父类,自动类型转换
- 当父类引用指向子类对象时,子类对象会发生转型,成为父类型
向下转型:
-
从父类到子类,强制类型转换
-
并不是所有对象都可以实现向下转型,只有当这个对象原本就是子类对象通过向上转型得到的时候才可以向下转型。
创建三个类,继承关系如图:
class Fruit{}
class Apple extends Fruit{}
class Banana extends Fruit{}
Fruit fruit = new Apple();//发生向上转型
Fruit fruit2 = new Banana();
Banana ba = (Banana) fruit2;//向下转型
//Banana ba_ = (Banana) fruit;
注意加注释的那一行,fruit变量本身是Apple对象向上转型的,他就是再转下来,也是Apple类型,不会成为Banana类型。可以通过编译,但是执行时会报异常。
Exception in thread "main" java.lang.ClassCastException: polymorphic.Apple cannot be cast to polymorphic.Banana