public class TestPerson {
public static void main(String[] args) {
// 向上类型转换,正常运行
Animal a = new Cat();
a.show();
// 向下类型转换,正常运行
Animal cat = new Cat();
Cat cat2 = (Cat) cat;
cat2.show();
// 运行时异常
Cat cat3 = (Cat) new Animal();
cat3.show();
// 正常运行
Cat cat4 = (Cat) getAnimal(a);
cat4.show();
// 运行异常
Cat cat5 = (Cat) getAnimal();
cat4.show();
}
public static Animal getAnimal(Animal a) {
return a;
}
public static Animal getAnimal() {
return new Animal();
}
}
class Animal {
public void show() {
System.out.println("Animal");
}
}
class Cat extends Animal {
public void show() {
System.out.println("Cat");
}
}我的疑惑是:明明都是强制转换,为什么有的会报异常,有的却可以正常进行?主要是异常的部分。注:我能理解向上类型转换以及向下类型转换正常运行的代码,只是不理解那些异常的代码。请大神讲解,感激不尽
5 回答
已采纳
dky
TA贡献93条经验 获得超26个赞
强制类型转换的前提是, 对象本身的类型就是你要转换的类型,但是在java中,继承和多态的特性让我们在定义函数的参数和返回值的时候往往是定义其父类,比如说,什么肤色的人都能坐飞机,你在飞机上随机挑选一个乘客,你说这个乘客是黑人,这个命题事件成立的前提是这个人本身就是黑人,
scala_somnus_gxy
TA贡献23条经验 获得超5个赞
你的运行异常都是因为你直接用子类去创建父类的一个引用,按正常逻辑想想都不对啊,就像生孩子似的,父亲可以生出好几个孩子,你能倒过来说孩子生出好几个父亲?????
添加回答
举报
0/150
提交
取消