猿问

java为什么向下转型是不安全的?

向上转型会使子类覆盖的方法丢失,那么向下转型呢?为什么说是不安全的,强制转换的话会丢失什么数据?

CHANGEWOW
浏览 4123回答 4
4回答

JustWannaHugU

向上转型和向下转型都是java多态性的一种体现手段,只是向上转型不用强制转换向上转型即父类引用指向子类对象Gril是父类,漂亮女孩MMGril是子类那么,Girl g1=new MMGirl(); //向上转型       MMGirl mmg=(MMGirl)g1; //向下转型,编译和运行皆不会出错此时mmg指向的实际上还是子类漂亮女孩对象MMGirl,所以这里的向下转型是安全的。因为g1指向的是子类对象。而Girl g2=new Girl();MMGirl mmg1=(MMGirl)g2; //不安全的向下转型,编译无错但会运行会出错,此时mmg1指向的是由父类对象Girl强制转换成的假MMGirl对象试想,每个女孩Girl都会笑,但是漂亮女孩MMGirl具有蛊惑男人的微笑但是普通女孩没有现在我把一个普通女孩强制转换成了MMGirl,虽然面子上过去了(表现为能编译)但是她不具备勾人心魄的微笑呀!(这就是不安全的体现)能理解了吧?

千湖之梦

男人是人,但人不一定都是男人。

Garbag

子类转父类不一定不会报错,父类转子类就可能会报错 可以参考一楼的例子

CHANGEWOW

你的回答让我有了一些些感觉,我很赞同,但我能不能这样假设:double 强制转int 比如24.8会变成24那么向下转型是不是有这样的缺少才导致不安全的
随时随地看视频慕课网APP

相关分类

Java
我要回答