红联Linux门户
Linux帮助

Java编程:组合、继承和代理的区别

发布时间:2015-04-18 10:21:30来源:linux网站作者:darkhorse-pxf

组合、继承和代理三者的定义:

组合:在新类中new 另外一个类的对象,以添加该对象的特性。
继承:从基类继承得到子类,获得基类的特性。
代理:在代理类中创建某功能的类,调用类的一些方法以获得该类的部分特性。


使用场合:

组合:各部件之间没什么关系,只需要组合即可。like组装电脑,需要new CPU(),new RAM(),new Disk()……

演示代码如下:

public class Computer {
public Computer() {
CPU cpu=new CPU();
RAM ram=new RAM();
Disk disk=new Disk();
}
}
class CPU{    }
class RAM{    }
class Disk{    }


继承:子类需要具有父类的功能,各子类之间有所差异。like Shape类作为基类,子类有Rectangle,CirCle,Triangle……代码不写了,大家都经常用。

代理:飞机控制类,我不想暴露太多飞机控制的功能,只需部分前进左右转的控制(而不需要暴露发射导弹功能)。通过在代理类中new一个飞机控制对象,然后在方法中添加飞机控制类的各个需要暴露的功能。

演示代码如下:

public class PlaneDelegation{  
private PlaneControl planeControl;    //private外部不可访问
/*
* 飞行员权限代理类,普通飞行员不可以开火
*/
PlaneDelegation(){
planeControl=new PlaneControl();
}
public void speed(){
planeControl.speed();
}
public void left(){
planeControl.left();
}
public void right(){
planeControl.right();
}
}

final class PlaneControl {//final表示不可继承,控制器都能继承那还得了。
protected void speed() {}
protected void fire() {}
protected void left() {}
protected void right() {}
}