A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

       这是我今天上午碰到的问题,发在论坛上没什么人给我很好解释,链接地址是http://bbs.itheima.com/forum.php?mod=viewthread&tid=40391&extra=page%3D1%26filter%3Dtypeid%26typeid%3D128%26typeid%3D128我查了一些资料,按照我的理解说出一种解释:
       问题是:使用组合来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统的开销会更大?
       我的解释:系统开销不会更大。想想继承的知识,当创建一个子类对象时,系统会隐式地为子类创建对应的父类对象,这个父类对象可以在子类实例方法
                        里通过super引用来访问。因此,当采用继承关系实现复用时,系统创建Bird类和Dog类对象时,系统会隐式地为创建与之对应的Animal类对象。采用组合关系来
                        实现复用时,是程序员手动来创建被嵌入类(Animal)的对象,其系统开销不会有本质的差别!
                        开发中考虑使用继承还是使用组合时,先考虑类与类之间的关系,继承表达的是一种“是(is-a)”关系,而组合表达的是一种“有(has-a)”关系。

       另:各位亲~~,你有什么其它的见解吗?


2 个回复

倒序浏览
     首先,我同意你的观点:组合不会比继承开销更大。我觉得你上面的分析也很有道理,不过这些都是我们的猜想,要想真正讲清楚其中的原理应该不是件容易的事,可能要牵扯到java底层的东西还有操作系统。因此我的立场是:我们现阶段可以先不考虑哪种代码复用机制的系统开销更大。
    开发时,要组织好类与类之间的关系并不是件容易的事,有时候各种类的关系错综复杂,不是(is-a)、(has-a)就能解释清楚的,编程技术需要在不断的实践中才能提高,现阶段我们还是好好打基础吧。
    最后,祝所有的黑马们前程似锦!{:soso_e130:}
   
  

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
同意你的观点。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马