请问组合和继承这两个概念有什么区别

解决方案 »

  1.   

    继承是“is a",组和是“like a"
    java中要慎重使用使用继承,多使用组合!
      

  2.   

    比喻很生动啊。不错。
    其实个人认为,继承在编码阶段是不会用上的。软件在分析阶段,无法抽象功能,无法具体的说出哪个哪个类干什么,定框架的时候,只能用接口和抽象类;然后在设计阶段,定出哪个类必须是实现哪个接口extends哪个abstract class,这是一种很有用的机制,分析的时候不用想太细,设计的时候分细了也不会破坏分析定下来的框架,而至于到实实在的一个一个类在写代码的时候,你要用到别的类的内容就组合进来就可以了,如果这个时候还去继承,整个系统就乱了,设计就被破坏了,有可能分析都完蛋。因为当时定的两个接口是独立的,现在它的实现互相继承,肯定完蛋。
    借用一楼的比喻,你是你爸妈生的,你们都有亲属关系,这是血源决定的。有个女人你想和她做成为亲人,最直接的办法就是娶过来,成为你的老婆,而不是去认她做妈,然后从血型到基因都说和她是母子关系,显然这是不可能的。
    生活中不可能破坏血源关系,程序里可以,但是后果可想而知,所以都是不提倡用继承。设计(生孩子)阶段和编码(孩子长大了)阶段,继承和组合就各有所重了。离开哪个都不合适。
      

  3.   

    “is-a (是一个)”的关系便以继承表达,
        eg:(车子“是一种”交通工具)
    “has-a(有一个)”的关系便以组合来表达。