为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

CHANGEWOW 2016-08-13 14:49:12
向上转型会使子类覆盖的方法丢失,那么向下转型呢?为什么说是不安全的,强制转换的话会丢失什么数据?
查看完整描述

4 回答

已采纳
?
JustWannaHugU

TA贡献452条经验 获得超796个赞

向上转型和向下转型都是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,虽然面子上过去了(表现为能编译)但是她不具备勾人心魄的微笑呀!(这就是不安全的体现)

能理解了吧?


查看完整回答
3 反对 回复 2016-08-13
?
千湖之梦

TA贡献10条经验 获得超7个赞

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

查看完整回答
1 反对 回复 2016-08-13
?
Garbag

TA贡献1条经验 获得超0个赞

子类转父类不一定不会报错,父类转子类就可能会报错 可以参考一楼的例子
查看完整回答
反对 回复 2018-08-18
?
CHANGEWOW

TA贡献4条经验 获得超1个赞

你的回答让我有了一些些感觉,我很赞同,但我能不能这样假设:double 强制转int 比如24.8会变成24

那么向下转型是不是有这样的缺少才导致不安全的

查看完整回答
反对 回复 2016-08-13
  • 浊酒丶
    浊酒丶
    就是这样的,然后double类型的值足够大的话,向下转型会导致内存溢出,假如你每顿只能吃一碗饭,我能吃两碗,把你的饭给我吃没事,把我的给你吃你就撑死了
  • 4 回答
  • 0 关注
  • 4122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信