我们在学习了组合与继承之后,或许我们想要知道这两者之间的区别在哪呢?应用的时候如何进行选择呢?这是我们这篇文章所要讲述的内容。
首先,我们必须要知道,他们是为了对代码进行复用的两种不同方式,我们先来介绍一下二者的概念:
组合:只需在新的类中产生现有类的对象。新的类是由现有类的对象所组成的。
继承:按照现有类的类型来创建新类,无需改变现有类的形式,并且在其中添加新的代码。
区别:组合是显示地允许在新类中放置子对象,而继承是隐性的这样做。
在某些特定的情况下,我们允许类的用户直接访问新类中的组合成分,即将成员对象声明为public。例如:`
package lession04;
class Engine{
public void start() {}
public void rev() {}
public void stop() {}
}
class Wheel{
public void inflate(int psi) {}
}
class Window{
public void rollup() {}
public void rolldown() {}
}
class Door{
public Window window=new Window();
public void open() {}
public void close() {}
}
public class Car {
public Engine engine=new Engine();
public Wheel[] wheel=new Wheel[4];
public Door
left=new Door(),
right=new Door();
public Car() {
for(int i=0;i<4;i++)
wheel[i]=new Wheel();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Car car=new Car();
car.left.window.rollup();
car.wheel[0].inflate(72);
}
}
此例中,car的组合是问题分析的一部分,那么使成员成为public将有助于我们去了解怎样使用这个类。相对来说private更加安全,也是一般情况下我们进行设置的。
输出结果:
无输出。
一种更加形象的表达是:“is-a”来描述继承,“has-a”来描述组合。
请批评指正,谢谢