向下转型主要特点在于需要使用到一些子类自己特殊的定义处理。
范例:实现向下转型
class Person {
public void print() {
System.out.println("一个正常的人类行为,吃饭、睡觉、繁衍。");
}
}
class SuperMan extends Person {
public String fly() {
return "我可以飞。。。";
}
public String fire() {
return "我可以喷火。。。";
}
}
public class JavaDemo {
public static void main(String args[]) {
System.out.println("--------- 正常状态下的超人应该是一个普通人的状态 ----------");
Person per = new SuperMan() ; // 向上转型
per.print();
System.out.println("--------- 外星怪兽狗骚扰地球,准备消灭人类 ----------");
SuperMan man = (SuperMan) per ; // 向下转型
System.out.println(man.fly());
System.out.println(man.fire());
}
}
向上描述的是一些公共的特征,而向下描述的是子类自己特殊的定义环境,但是需要明确的是,向下转型并不是一件安全的事情。因为在进行向下转型之前一定要首先发生向上转型。
范例:观察错误的程序
public class JavaDemo {
public static void main(String args[]) {
System.out.println("--------- 正常状态下的超人应该是一个普通人的状态 ----------");
Person per = new Person() ; // 不转型
per.print();
System.out.println("--------- 外星怪兽狗骚扰地球,准备消灭人类 ----------");
SuperMan man = (SuperMan) per ; // SuperMan类与Person类
}
}
Exception in thread "main" java.lang.ClassCastException: class Person cannot be cast to class SuperMan
以后只要是发生对象的向下转型之前一定首先发生向上转型,两个没有任何关系的实例如果要发生强制转换,那么就会出现“ClassCastException”异常,所以向下转型不是一件安全的事情。