什么是类的组合?
在一个类的内部,以一个对象(引用)作为域变量
例如:
class A(){
B b; //A的域变量
say(){
b.speak();
}
}
class B(){
int x;
speak(){};
}
虽然A和B是两个独立的对象,但是A对象中有B的对象(引用),就可以通过A操纵B,所以就可以看成是A对象由B对象组合而成。
如上述代码所示,A对象可以通过调用b的方法实现自己的方法,可以实现类的复用。(并且组合优于继承)
组合有什么用?
无疑:①可以实现类的复用
继承也可以实现类的复用,那么为什么还要用组合呢?
其实,你仔细想想,将生活中的事物抽象成类,类与类之间并不都是父与子的关系,所以所有类的复用都采用继承关系明显是不恰当的
例如:定义了一个喇叭类,有发出声音的功能,再定义一个手机类,手机发出声音的方法想复用喇叭类,就可以将喇叭类的对象作为手机类的属性,通过操纵喇叭类的对象实现手机发生的功能,这就是类的组合(可以看成是手机由喇叭组成)
如果让手机继承喇叭来实现类的复用,显然是不合理的(二者并不是父子关系)
从上述的举例中我们也可以看出,手机对象是通过操纵喇叭对象来实现发声的,这种操纵(引用)是由访问控制权限保护的(喇叭类的私有成员并不会被公开),因此,②使得对象之间耦合性较为疏散。
版权归原作者 一只可爱的小猴子 所有, 如有侵权,请联系我们删除。