社区
C++ 语言
帖子详情
为什么不直接用子类引用指向子类对象,而用父类引用指向子类对象
半醉看夕阳
2015-10-21 09:23:40
在实现多态的过程中,为什么不直接让子类引用指向子类对象,而要让父类引用指向子类对象,这样做好什么好处?谢谢
...全文
1883
11
打赏
收藏
为什么不直接用子类引用指向子类对象,而用父类引用指向子类对象
在实现多态的过程中,为什么不直接让子类引用指向子类对象,而要让父类引用指向子类对象,这样做好什么好处?谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lwxtest0
2019-03-03
打赏
举报
回复
多态的精髓就在这里了
qq_34409626
2019-02-27
打赏
举报
回复
1
当有多个继承,关系很乱的时候就展现其作用了:
假想,如果自己调用自己的方法,就会不知道你是哪个类的派生,没有多态的作用了。
所以总有老子叫儿子办事的道理:
老爸(父类)指定个工具给儿子(派生类),儿子才可以用这个工具做其他事情,我们也知道他那个工具来自他爸,认祖归宗嘛
www_adintr_com
2015-10-24
打赏
举报
回复
1
你针对子类写的一个函数就只能用于操作这个类的对象 你针对父类写的一个函数可以操作所有从这个父类继承的子类的对象 这是对
一个东西进行操作
和 对
一类东西进行操作
的区别
liganglester
2015-10-24
打赏
举报
回复
2
我也举个例子: 如果你写框架(framework)的话也许会体会深刻。 在写框架代码时,你往往不知道每个对象的具体类型,只知道他们共同的父类是什么。 在框架的代码里,也就是通过管理这些具体类型的父类来实现框架代码的通用性的,也可以说扩展性(增加新的子类)。 比如: 你写了一个飞机游戏,画面里出现什么类型飞机是随机决定的,你的代码里也就不可能用一个具体飞机类型来操作。 所以,往往是随机生成各种类型飞机,他们有共同的父类,你的代码就可以用父类指针来控制行为。比如中弹后的能量损失多少之类,每种飞机可能不同。 以上,不知道对楼主有帮助没。
bluemei-lee
2015-10-23
打赏
举报
回复
1
好处之一: 上层逻辑抽象,独立清晰, 方便以后扩展. 举个常见的例子,比如设计一个网卡驱动类,那么上层只需要考虑网卡的功能接口,具体到不同厂商只要遵循接口实现不同的子类. 这时调用方就用接口(或者父类)来调用,而不是依赖某个特定厂商A的网卡,这样即使换一种厂商B网卡也不需要重新改代码,而只要实例化一个厂商B驱动对象赋给父类指针.
ztenv
版主
2015-10-23
打赏
举报
回复
当参数类型不确定时(比如:A是父类,B、C、D是子类;参数可能需要传递B类型或C类型或D类型指针或引用),使用子类型是不是会受限制?或增加了函数(重载)?如果参数类型指定为父类型A的指针或引用,那函数只要有一个就够了,即使以后再增加了D类型,那么函数的签名也不会发生变化,通过多态机制可以调用到子类型的函数(is-a关系) 子类型一般是具体类型,个数有可能是不可预知的,有可能会变化的; 父类型一般是抽象类型,只要抽象的好,发生变化的可能性比较小;
张小飞Official
2015-10-22
打赏
举报
回复
好处就是你不用重新再去定义一个类。 楼上也说了这是面向对象语言的一大特性,对象很基本的一个特性就是继承,但是在函数中是怎么看出来这两个类是继承关系呢,只能在使用的时候不光是提醒你自己,这个类是另一个类的子类,也是方便其他人去阅读你的代码。假如多重继承与虚类存在的话使用的时候不加父类声明岂不是很容易乱么
罗博士
2015-10-22
打赏
举报
回复
方便代码以后的修改或者升级。
yu.sang
2015-10-21
打赏
举报
回复
首先当然可以让子类指向子类的方法,但是这么使用的场合觉对不是多态的场合。 要理解多态的作用,结合实际的使用,就能很清楚知道这么做是多大的方便的,这可是面向对象语言的一大特性啊。
dustpg
2015-10-21
打赏
举报
回复
对外暴露一致的接口方便调用, 你不知道这个东西是什么, 但是知道它能干什么就行.
继承之父
子
类
赋值兼容性
赋值兼容性:
子
类
可以当成父类使用
如何理解
父类
引用
指向
子
类
对象
从对象的内存角度来理解试试.假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的
子
类
Son,它里面的变量需要占用0.5M内存.现在通过代码来看看内存的分配情况:Father f = new Father();//系统将分配1M内...
#父类
指向
子
类
_Java中为什么使用向上转型而不
直接
创建
子
类
对象?
初学者在学习向上转型可能会很难理解,向上转型并不能调用
子
类
特有属性和方法,我们必须先生成
子
类
实例再赋值给父类
引用
(向上转型),然后将父类
引用
向下强制转换给
子
类
引用
(向下转型),这样才能调用
子
类
中的所有成员。这看起来像是多次一举,还不如
直接
创建
子
类
实例。随着技术的提升,我们在学习其它开源项目时会发现很多地方都用了向上转型和向下转型的技术。本节将带大家了解向上转型和向下转型的意义及使用场景。...
用父类
引用
指向
子
类
好处
子
类
为了省事就继承父类中的一些东西,,
子
类
如果想把父类的方法改一下就出现了重写,
子
类
想要自立门户也调用自己的东西就出现了多态里面的向下转型,(注意这里使用了也字) 那不将父类的
引用
指向
子
类
照样可以调用
子
类
里面的东西,为什么那么费事还要向下转型? 因为想要用父类的东西啊,其实
直接
子
类
引用
指向
子
类
对象也可以用父类的东西,
直接
new 父类名()也可以,那引入继承干嘛,两者比较哪个更费事。 转载于:h...
为什么
子
类
对象可以赋值给父类,而父
类对象
不可以赋值给
子
类
呢?
为什么
子
类
对象可以赋值给父类,而父
类对象
不可以赋值给
子
类
呢? 标签: 多态 向上转型 向下转型
父类
引用
指向
子
类
对象
子
类
引用
指向
父
类对象
分类: javaSE 假设现在有两个类:父类Parent和
子
类
Children1。 通常我们会看到这样
子
的写法: Parent p=new Children1(); 或是: Parent p=new Parent(); Children1 c=new Children1(); p=c; 问题1:这样
子
写有什么作用? 问题2:为什么不能写成“Children1 c=new
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章