课程
/后端开发
/Java
/Java入门第二季 升级版
本节例题中animal可以强制转换成Dog类,为什么不能强制转换成Cat类?Cat类和Dog类都是Animal类的子类啊。
2017-07-07
源自:Java入门第二季 升级版 10-2
正在回答
animal对象,是由Dog类的对象通过自动类型转换得来的,对象的属性和方法可以和Dog类的对象相匹配,所以可以再强制转换为Dog类,而不能匹配Cat类,所以不能强制转换为Cat类。
Cat cat=(Cat)animal;
这个语句在编译是是Cat类型的,在运行时是Dog类型的,两种类型不匹配,所以会报错。
也可以 这样理解 ,在程序刚开始运行是,系统为Dog类开辟一块内存地址空间,Dog类属于animal类,所以Dog类可以转,但是Cat类就不可以了,应为Cat类不属于Dog类,所以 不可以转
简单说,animal之所以可以强制转换为Dog类是通过“Animal animal = dog”语句先自动转换了的,所以animal跟Dog相匹配,如果Cat类跟Dog类一样先通过“Animal animal2 = cat”语句自动转换后再来强制把animal2转换成Cat也是可以的。你可以自己上手去操作一下,你就能更好的去了解了
因为animal已经被强制转换成Dog类,Dog类跟Cat类不匹配所以不能再进行转换。你可以先将animal强制转换成Cat类,那就不能再强制转换成Dog类了。
举报
课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙
4 回答为什么animal能转换成dog类对象,而不能转成cat对象呢?
5 回答为什么dog就可以强制类型转换,而cat就不行?不都是动物的子类么?
3 回答dog无法强制类型转换
1 回答Animal animal = dog;//向下类型转换 自动类型转换 ???
2 回答4-2节Animal类型和Dog类型的转换