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

Animal animal = dog 难道不是dog包含的比animal多吗?

Animal animal = dog 难道不是dog包含的比animal多吗?那在animal指向dog的过程中,不是会损失一部分(重载也丢失了)?

反向的 Dog dog =animal ,并不会损失数据,只是会有空值。那为什么又不可以?

尝试进行理解:
这里的animal只是一个指针,父类的指针可以指向子类的对象,反之不行。这样对吗?


提问者:今天阳 2019-01-08 14:45

个回答

  • 慕慕612771
    2019-01-08 15:28:15
    已采纳

    编程语言是仿照现实情况做处理的。Animal animal = dog,anmimal指针可以指向子集中的一部分。这个没问题。你说的dog包含的多,只是特征多。父类包含的是大家共有的信息,是抽象,肯定特征少。比如动物都会吃,不一定都会象狗一样看门。animal指向dog的过程中,它的类型还是animal,不是dog。所以重载不会丢失。

    Dog dog =animal,这句,如果不把animal强制转型,这句话会报错。因为两者类型不同。而且,如果这个animal不是事先已经指向子类的指针,在Dog dog =(Dog)animal;转型过程中也是错误的,即使编译不报错,运行也会报错。也就是说:Animal animal = Animal();Dog dog =(Dog)animal;运行时会报错。只有Animal animal = Dog();Dog dog =(Dog)animal;才会不报错。所以向下转型本身意义不大,不是都能转的。

    父类的指针可以指向子类的对象。这个没错。因为Dog肯定是Animal。反过来。Animal一定是Dog吗?肯定不是。

  • 今天阳
    2019-01-10 15:25:03

    谢谢大佬 spacer.gif