Animal animal = dog 难道不是dog包含的比animal多吗?那在animal指向dog的过程中,不是会损失一部分(重载也丢失了)?
反向的 Dog dog =animal ,并不会损失数据,只是会有空值。那为什么又不可以?
尝试进行理解:
这里的animal只是一个指针,父类的指针可以指向子类的对象,反之不行。这样对吗?
编程语言是仿照现实情况做处理的。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吗?肯定不是。
谢谢大佬