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

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

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

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

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


正在回答

2 回答

编程语言是仿照现实情况做处理的。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吗?肯定不是。

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

谢谢大佬 spacer.gif 

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

举报

0/150
提交
取消

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

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