如标题所述,我对两者的含义都不清楚。
继承表达的是is-a
关系,而组合表达的是两个类之间的has-a
关系。
一个组合的例子是多边形。它有一个有序的点序列。用C++术语来说:
struct Polygon {
std::vector<Point> points;
};
尽管logic_error
是一种异常
:
struct logic_error : public exception {
};
:)
- sbi只需谷歌搜索继承与组合,您将得到很多结果。
以Java为例
public class Banana extends Fruit{ //<---Inheritance Banana is-a Fruit
private Peel bananaPeel; //<--Composition banana has a Peel
public Peel getPeel(){
return bananaPeel;
}
}
继承意味着从父类中继承某些东西。例如,你可能会继承你母亲的眼睛或者继承你父亲的体型。
它意味着从父类中派生属性、特征和行为。所以你可以使用parent.walk()、parent.sleep()、parent.eat()或者其他方法。
容器或者组合可能有点难以解释。
或者说一辆汽车有刹车。汽车由刹车组成。但是刹车并没有从刹车中继承...这是不同的概念。我知道这个解释很奇怪...但我想这就是我能做到的了。
让我们看一下这段代码:
class Parent
{
public :
void sleep() ; void eat() ; void walk() ;
string eyeColor; int height ;
};
class Child: public Parent
{
}
因此,子类可以继承父类的函数和属性,但当然它可能会有母亲或父亲的眼睛颜色。即使孩子的属性不同,它仍然可以做父类能做的任何事情。
现在组合是另一回事。一个孩子可以拥有一个玩具,或者一个父母可以拥有一个孩子。所以我可以这样做:
class Toy
{
string model ;
};
class Child
{
Toy transformersToy ;
};
所以孩子现在有变形金刚玩具了...但是孩子继承了transformersToy.model属性吗?没有,因为它没有被继承。
继承是动态多态性,这些天改变了其功能,成为代码重用的一种技术。但组合是确保实现能力的一种技术。
继承是类之间的关系,而容器关系是类实例之间的关系。