Java继承(extends)与组合(Composition)
Java继承(Inheritance)与组合(Composition)
概述:继承(extends):是一种联结类与类的层次模型。指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,
并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系.组合(Composition):体现的是整体与部分、拥有的关系。
继承的实现方式:
class Verhicle{
}
class Car extends Verhicle{
}
组合的实现方式:
class Tire{
}
class Car extends Verhicle{
private Tire t = new Tire();
}
代码举例:
package com.xinpaninjava.composition;
/**
* 组合例子:车
*
* 通过对车中其他部件的对象引用,来实现代码的复用
*/
public class Car {
public Engine engine = new Engine();
public Wheel[] wheel = new Wheel[4];
public Door left = new Door(), right = new Door(); // 2-door
public Car() {
for (int i = 0; i < 4; i++)
wheel[i] = new Wheel();
}
public static void main(String[] args) {
Car car = new Car();
car.left.window.rollup();
car.wheel[0].inflate(72);
}
}
/**
* 组合例子:引擎
*/
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() {
}
}
分析:如选择继承,就需要取得一个现成的类,并制作它的一个特殊版本。通常,这意味着我们准备使用一个常规
用途的类,并根据特定的需求对其进行定制。只需稍加想象,就知道自己不能用一个车辆对象来合成一辆汽
车——汽车并不“包含(has-it)”车辆;相反,它“属于(is-a)”车辆的一种类别。“属于(is-a)”关系是用继承来表达的,而
“包含(has-it)”关系是用合成来表达的
总结:
如果存在一个“是”的关系,并且一个类要对另一个类公开所有的接口,那么继承是更好的选择
如果存在一个“有”的关系,那么首选组合。
JAVA/264.html">http://www.itemperor.com/a/JAVA/264.html
原文链接:http://www.jxszl.com/biancheng/JAVA/446616.html