为什么Cat类型不能转换成Animal类型?为什么说animal不含cat类型的元素?可是cat不是animal的子类,继承了animal的所有属性和方法吗?
为什么说Cat类型不能转换成Animal类型,因为Dog dog = new Dog(); Animal animal = dog; Dog dog2 = (Dog)animal这三段代码告诉你 dog已经强转为animal; 如果此刻你再把Cat强转为animal,就相当于把Cat强转为dog,子类强转子类,所以就错了! 看下面图片,这样就可以将Cat转化为Animal类型。。。如果还不明白,自己试试代码就明白了
视频里最后是将cat转成dog呀
Cat类是可以转换成Animal类的;
现在的animal实际上是Dog类的,类型是和Dog相同的,所以animal不含Cat类,所以不能转换成Cat类
最后那一句漏了两个括号,重新写一下以免误导:Cat()和Dog()是没有关联的,所以不能转换
我也是新手,不保证对,我是这样理解的:
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是没有关联的,所以不能转换
你们在说些什么啊
我觉得如果你开辟 Cat cat=new cat; 就可以了
视频有一个父类对象,并没有用new关键字开辟内存空间,但是子类Dog类创建对象的时候使用new关键字开辟了内存空间,父类对象只是像指针一样指向了子类Dog的对象,也就是引用。那么animal对象实际上还是Dog类对象,当强制转换animal对象的时候实际上转换的Dog类的对象,所以animal对象不能强制转换成Cat类。强制转换与方法和属性没有关系,与内存类型有关。这是我的理解,希望能帮到你。
因为在刚开始申明了Animal animal= dog; animal开辟的是dog 空间,即使你强制转换 Cat cat=(Cat) animal;
系统不报错,。但最后运行 的时候 cat 并不能与dog 相兼容
是不是在程序中再加一条“Animal animal=cat;“语句就可以将cat类型转换成animal类型了?