有两个类, 父类 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: