继承和组合有什么区别?

时间:2011-09-21 15:09:42

标签: oop design-patterns

正如标题所说,两者的含义都没有。

7 个答案:

答案 0 :(得分:2)

继承表示is-a关系,而组合表达两个类之间的has-a关系。

合成的一个例子是多边形。它有一个有序的点序列。用C ++术语:

struct Polygon {
  std::vector<Point> points;
};

虽然logic_errorexception

struct logic_error : public exception {
};

答案 1 :(得分:1)

正如pmr所指出的,遗产是is-a关系,组合是has-a关系。

组合通常用于包装类和表达彼此包含的类之间的关系。

继承用于多态,您可以在其中拥有基类,并且希望扩展或更改其功能。

答案 2 :(得分:1)

只是谷歌继承与组合,你会得到很多结果 以java为例

public class Banana extends Fruit{ //<---Inheritance Banana is-a Fruit
    private Peel bananaPeel; //<--Composition banana has a Peel
    public Peel getPeel(){
        return bananaPeel;
    }
}

答案 3 :(得分:1)

继承意味着从父级继承内容。 例如,你可以继承你母亲的眼睛或继承你父亲的身材。

这意味着从父类派生属性,特征和行为。所以你可以使用parent.walk(),parent.sleep(),parent.sleep()等等。

容器或组合有点难以解释。

或许车子有刹车。这辆车由刹车组成。但制动器并非继承制动器......不同的概念。我知道非常奇怪的解释..但是我猜我能做多少。

我们来看看这段代码:

class Parent 
{
   public :
     void sleep() ; void eat() ; void walk()  ; 
     string eyeColor; int height ; 
};

class Child: public Parent
{

}

因此Child类可以继承Parent的功能和属性,但当然它可能具有母亲或父亲的眼睛颜色。即使孩子的属性不同,它仍然可以做父母可以做的任何事情。

现在作文是另一回事。孩子可以有玩具或父母可以有孩子。所以我能做到:

class Toy
{
  string model ; 
};

class Child
{
   Toy transformersToy ;
};

所以Child现在拥有变形金刚玩具......但Child是否继承了transformersToy.model属性?不,因为它不是继承。

答案 4 :(得分:0)

继承是类之间的关系,containerhip是类实例之间的关系。

答案 5 :(得分:0)

继承是动态多态,现在将其功能更改为代码重用技术。但组成是确保实施能力的技术。

答案 6 :(得分:0)

我看到的一个主要观点是对象的所有权。继承不拥有/不提供任何东西,它只是赋予了基类的特征。而Composition使所有者拥有创建的对象。

在第一个示例中,多边形具有点矢量。因此,多边形在其中拥有/包含点。 在继承时,您可以拥有/使用/扩展基类的现有特征。