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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhouxp3323 黑马帝   /  2012-3-18 08:34  /  2874 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

继承我知道,我想问下组合是不是就是在一个类中创建另一个类的引用变量,来调用另一个类的方法啊?

6 个回复

倒序浏览
组合关系,就比如人的头、手、脚等各个器官,组合起来就是一个人。所以和人的关系,就是一个组合关系。
回复 使用道具 举报
如果你想让当前类具有某个特性,但此类直接调用的话有困难或者不能直接调用,就考虑用继承。如果你是想让当前类中使用某个类的private成员,就只能通过组合来实现;一般来说,组合和继承的差别就是"has a"和"is a"关系的差别,例如说苹果是水果,这是继承,而人有名字,这应该算是组合。
回复 使用道具 举报
最生动的比方:   
   
继承是说“我父亲在家里给我帮了很大的忙”。   
   
组合是说“我请了个老头在我家里干活”。


  组合是在一类类中引用另一个类。生成另一个类的实例。   
  而继承只是继承了父类的变量和方法。   
  区别:   
  使用组合可以用到另一个类中私有的变量和方法,而继承就不可以用到父类的私有的变量和方法了   
  他们都有各自的好处,要灵活的运用。

还有继承的耦合性比组合大得多。
因为java又是只能单继承,这就会带来很多的极限性,特别是需要使用到多个类中的东西的时候可以用组合来代替继承。
不过有时继承有时也是无可替代的,毕竟是面向对象的一个重大组成部分,在多态方面起来很大的作用。

点评

楼主讲得很生动  发表于 2012-3-18 13:31

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
你理解的对。继承耦合性比组合强,在think in java 中推荐使用组合的方式 扩展性更强。
回复 使用道具 举报
李深山 发表于 2012-3-18 10:11
最生动的比方:   
   
继承是说“我父亲在家里给我帮了很大的忙”。   

哦,楼主讲的很明白。
回复 使用道具 举报
    李深山同学的表述清晰易懂,我再补充一下:
    组合和继承都允许在新的类中设置子对象(subobject),组合是直接毫无修饰的说法,而继承则是委婉的说法。
    二者间的区别何在,以及怎样在二者之间做出选择。
    组合技术通常用于你想要在新类中使用现有类的功能而非它的接口的情形。即,你在新类中嵌入某个对象,借其实现你所需要的功能,但新类的用户看到的只是你为新类所定义的接口,而非嵌入对象的接口。为取得此效果,你需要在新类中嵌入一个private 的现有类的对象。
    有时,允许类的用户直接访问新类中的组合成份是极具意义的;也就是说,将成员对象声明为public 。如果成员对象自身都实现了具体实现的隐藏,那么这种做法就是安全的。当用户能够了解到你在组装一组部件时,会使得端口更加易于理解。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马