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

为什么cat 类不能被强制转换,求大哥哥大姐姐解释

这点有点懵,为什么可以转换Dog类 却不能转换Cat类?  为啥?

正在回答

3 回答

因为是两个不同内存地址没有继承关系不能转 转就报错

0 回复 有任何疑惑可以回复我~

先看上面一句先创建了dog对象,记住是dog对象,这句你可以这么理解—狗是动物,向上转换就是这样,向下转换你可以这样说,动物是狗,是不是觉得有问题!但这里创建对象是狗,向下有了一个对象,向下转换的时候可以这么理解—这个动物是狗,那就没问题了。后面说猫为什么不行,这个动物是猫。但是你创建的对象是狗,所以不对!

0 回复 有任何疑惑可以回复我~

好比:杯子里面的水倒入水壶中,还是水

同上面一样

1、Dog dog=new Dog();//这个dog对象是Dog类型(类是对象的类型),对象里面的内容都是属于Dog类的

2、Animal animal=dog;//相当于---把杯子里面的水倒入空的水壶中,水壶中的内容还是水一样不会变成其他的东西;---这个是小类型向大类型转换,没有风险,看着他的类型范围大了,其实实际上包含的内容还是Dog类型中的内容

3、Dog dog=(Dog)animal;//相当于---把水壶里面的水倒入杯子中,还是水一样,这个是大类型向小类型转换,存在风险,水可能有溢处的风险;所以需要强制进行转换;如果还是有点不明白,可以看下double类型转换为int型的知识点,思路差不多~

*********

4、Cat cat=(Cat )animal;//仔细看第2步,animal对象的类型是Animal;但是animal对象指向的内容是Dog类型中的内容,与Cat没有关系,程序在编译的时候因为编译的是Cat类型,所以程序不会报错,但是程序运行的时候,运行的是Dog类型,所以会报错,Dog类与Cat类没有关系



4 回复 有任何疑惑可以回复我~
#1

慕清岭

第二句,Animal animal=dog;//相当于---把杯子里面的水倒入空的水壶中。到底animal是杯子还是dog是杯子,dog和animal到底哪个范围更大
2018-09-29 回复 有任何疑惑可以回复我~
#2

洛辰m 回复 慕清岭

对象的类型啊。。。就意思动物和狗你说哪个大
2018-09-30 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么cat 类不能被强制转换,求大哥哥大姐姐解释

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信