向上转型
* 多态本身的父类引用指向子类对象就是 将子类对象向上转型
* 向下转型
* 如果之前已经是一个子类对象,提升成了父类引用,就可以强制向下转为子类引用
Zi zi = new Zi();
Fu fu = new Fu();
//多态
Fu fz = new Zi(); //父类引用指向子类对象
//这时候可以调用父类方法,但按子类的方法执行(即如有方法重写,按重写方法执行,多态),不能调用父类没有的方法。
fz.method2(); //method2() 是子类继承父类并重写的方法
//fz.method(); //method() 是子类中特有的方法,这时不能被fz调用
//向下转型(强制类型转换)
//如果之前已经是一个子类对象,提升成了父类引用,就可以强制向下转为子类引用
Zi zi2 = (Zi)fz; //fz之前是通过向上转型得到的
//这时候zi2可以调用子类所有的方法(包括从父类继承的),并按子类方法执行
zi2.method();
zi.method2();
//fu引用指向的对象,创建对象是就是父类对象,无法转为子类对象
//类型转换异常是一个运行时异常。即编译时不报错,运行时报错的异常
Zi zi3 = (Zi)fu; //这个就不对了
* 父类引用指向子类对象时,向上转型相当于给儿子带了一个父亲的面具!
* 向下转型时,相当于又把面具给摘下来了。
* 而真实的父亲,并不能向下转型,因为父亲根本不带面具,所以也没办法摘下来!
|