一、组合概念的引入
相比面向过程的程序,面向对象的程序具有具有“高聚合,低耦合”的特点。这一技术是依靠封装与组合技术的综合运用来实现的。封装利用了访问控制符来实现,而组合是通过对象内部的属性引用来实现的。
二、代码举例
在下列代码段中,引入 fp 就将 A 对象与 FighterPlane 对象组合了起来。A 对象和 FighterPlane 对象在内存中是两个对象,但由于 A 中拥有 FighterPlane 对象的引用,就可以把 A 对象看成是由 FighterPlane 对象组合而成的。
class FighterPlane{
String name;
int missileNum;
public FighterPlane(String _name,int _missileNum){
name = _name;
missileNum = _missileNum;
}
public void fire(){
if(missileNum>0){
System.out,println("Now Fire a Missile!");
missileNum -= 1;
}
else{
System.out.println("No Missile Left!");
}
}
}
class A{
FighterPlane fp;
public A(FighterPlane fpp){
this.fp = fpp;
// A对象拥有了FighterPlane的对象引用
}
public void invoke(){
// A对象发送消息给FighterPlane的对象
System.out.println(fp.name);
}
}
public class Run{
public static void main(String args[]){
FighterPlane ftp = new FighterPlane("su35",10);
A a = new A(ftp);
a.invoke();
}
}