问答详情
源自:10-2 多态中的引用类型转换

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

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

提问者:,_0034 2016-04-16 20:43

个回答

  • qq_土豆_24
    2016-12-07 14:57:33


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

    http://img.mukewang.com/5847b1350001a9d303140103.jpg

  • 我说红豆你说哟
    2016-08-25 15:28:56

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

  • 小小白白白
    2016-07-10 21:52:09

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

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

  • 汇雨落尘珠
    2016-06-08 22:10:10

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

  • 汇雨落尘珠
    2016-06-08 22:04:57

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

    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是没有关联的,所以不能转换

  • qq_硬汉_5
    2016-06-06 16:55:38

    你们在说些什么啊



  • 慕粉小蜗牛
    2016-06-06 09:14:11

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

  • Arefa
    2016-05-11 22:59:48

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

  • qq_肃穆_03181496
    2016-04-18 11:02:53

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

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

  • ,_0034
    2016-04-16 20:49:07

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