一文搞懂Java 中类的组合

什么是类的组合?

在一个类的内部,以一个对象(引用)作为域变量

例如:

class A(){
	B b; //A的域变量
	say(){
		b.speak();
	}
}
class B(){
	int x;
	speak(){};
}

虽然A和B是两个独立的对象,但是A对象中有B的对象(引用),就可以通过A操纵B,所以就可以看成是A对象由B对象组合而成。

如上述代码所示,A对象可以通过调用b的方法实现自己的方法,可以实现类的复用。(并且组合优于继承

组合有什么用?

无疑:①可以实现类的复用

继承也可以实现类的复用,那么为什么还要用组合呢?

其实,你仔细想想,将生活中的事物抽象成类,类与类之间并不都是父与子的关系,所以所有类的复用都采用继承关系明显是不恰当的

例如:定义了一个喇叭类,有发出声音的功能,再定义一个手机类,手机发出声音的方法想复用喇叭类,就可以将喇叭类的对象作为手机类的属性,通过操纵喇叭类的对象实现手机发生的功能,这就是类的组合(可以看成是手机由喇叭组成)

如果让手机继承喇叭来实现类的复用,显然是不合理的(二者并不是父子关系)

从上述的举例中我们也可以看出,手机对象是通过操纵喇叭对象来实现发声的,这种操纵(引用)是由访问控制权限保护的(喇叭类的私有成员并不会被公开),因此,②使得对象之间耦合性较为疏散

猜你喜欢

转载自blog.csdn.net/qq_51800570/article/details/121125808