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

为什么Cat类型不能转换成Animal类型?为什么说animal不含cat类型的元素?可是cat不是animal的子类,继承了animal的所有属性和方法吗?

为什么Cat类型不能转换成Animal类型?为什么说animal不含cat类型的元素?可是cat不是animal的子类,继承了animal的所有属性和方法吗?

正在回答

11 回答


为什么说Cat类型不能转换成Animal类型,因为Dog dog = new Dog();     Animal animal = dog;   Dog dog2 = (Dog)animal这三段代码告诉你 dog已经强转为animal; 如果此刻你再把Cat强转为animal,就相当于把Cat强转为dog,子类强转子类,所以就错了!   看下面图片,这样就可以将Cat转化为Animal类型。。。如果还不明白,自己试试代码就明白了

http://img1.sycdn.imooc.com//5847b1350001a9d303140103.jpg

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

视频里最后是将cat转成dog呀

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

Cat类是可以转换成Animal类的;

现在的animal实际上是Dog类的,类型是和Dog相同的,所以animal不含Cat类,所以不能转换成Cat类

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

最后那一句漏了两个括号,重新写一下以免误导:Cat()和Dog()是没有关联的,所以不能转换

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

我也是新手,不保证对,我是这样理解的:

Dog dog=new Dog();创建对象引用Dog()这个子类;把这个类赋给dog,类型还是Dog类;但这个类新开辟了地址,而Animal animal=dog把Dog()这个类赋给了animal,animal的类型是Animal(因为Dog()是Animal()的子类,就像一条河的支流,本质上还是Animal()的一部分,所以可以转换),而Dog dog2=(Dog)animal;

把animal赋给dog2,类型是Dog,也就是说这里实质上就是dog2=dog,dog是Dog类,所以可以转换。而Cat cat=(Cat)animal;上面说了Dog()类被引用过来命名为dog,而dog又命名为animal,只是类型变了,也就是说,animal=Dog();也就是说这里我们把Dog()赋给cat,类型转变为Cat类型,那么问题来了,Cat类型是Cat()的类型,Cat()和和Dog是没有关联的,所以不能转换

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

你们在说些什么啊



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

我觉得如果你开辟 Cat cat=new cat; 就可以了

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

慕粉15555107797

我创建了一个会报错,
2016-06-29 回复 有任何疑惑可以回复我~
#2

慕粉小蜗牛 回复 慕粉15555107797

子类确实继承了父类的方法和属性,但两个子类确实不能转换,因为你开辟新的空间。所有子类都在父类这个大空间下,但里边子类是不同的空间,所以不能转换
2016-06-29 回复 有任何疑惑可以回复我~

视频有一个父类对象,并没有用new关键字开辟内存空间,但是子类Dog类创建对象的时候使用new关键字开辟了内存空间,父类对象只是像指针一样指向了子类Dog的对象,也就是引用。那么animal对象实际上还是Dog类对象,当强制转换animal对象的时候实际上转换的Dog类的对象,所以animal对象不能强制转换成Cat类。强制转换与方法和属性没有关系,与内存类型有关。这是我的理解,希望能帮到你。

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

因为在刚开始申明了Animal animal= dog;    animal开辟的是dog 空间,即使你强制转换  Cat cat=(Cat) animal;

系统不报错,。但最后运行 的时候   cat 并不能与dog 相兼容

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

是不是在程序中再加一条“Animal animal=cat;“语句就可以将cat类型转换成animal类型了?

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

罗建彪

这样程序员会报错的,cat和dog不能兼容
2016-05-12 回复 有任何疑惑可以回复我~
#2

啊啊啊啊123

我觉得加一个Cat cat = new Cat(); Animal animal=cat;就能用了
2016-06-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么Cat类型不能转换成Animal类型?为什么说animal不含cat类型的元素?可是cat不是animal的子类,继承了animal的所有属性和方法吗?

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