11. 合成与继承的选择

post11

合成与继承的选择

  • 要点: “属于”关系是用继承来表达的,而 “包含”关系是用合成来表达的。

合成的使用场景举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package com.isflee.c06_4_1_car;

//: reusing/Car.java
// Composition with public objects.
//到底选择合成还是继承(合成和继承的应用场景)
//以下例子时合成的应用场景, 对于一辆车, 它 "包含" 了引擎,车轮, 窗户, 车门等部件。
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(); // 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);
}
} ///:~