黑马程序员技术交流社区

标题: 关于继承和组合,我努力获取到了一种解释,大家有何见... [打印本页]

作者: HM李超    时间: 2013-3-9 23:54
标题: 关于继承和组合,我努力获取到了一种解释,大家有何见...
       这是我今天上午碰到的问题,发在论坛上没什么人给我很好解释,链接地址是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)”关系。

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



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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2