Skip to content

Commit 64f8b53

Browse files
committed
校对 第8章-组合语法(未翻译完全)
1 parent bd9b6b2 commit 64f8b53

File tree

1 file changed

+46
-34
lines changed

1 file changed

+46
-34
lines changed

docs/book/08-Reuse.md

Lines changed: 46 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,55 +6,67 @@
66

77
> 代码复用是面向对象编程(OOP)最具魅力的原因之一。
88
9-
对于像 C 语言等面向过程语言来说,“复用”通常指的就是复制代码。任何语言都可通过简单复制来达到代码复用的目的,但是这样做的效果并不好。Java 围绕“类”(**Class**来解决问题。我们可以直接使用别人构建或调试过的代码,而非创建新类、重新开始。
9+
对于像 C 语言等面向过程语言来说,**复用**通常指的就是**复制代码**。任何语言都可通过简单复制来达到代码复用的目的,但是这样做的效果并不好。Java 围绕****来解决问题。我们可以直接使用别人构建或调试过的代码,而非创建新类、重新开始。
1010

1111
如何在不污染源代码的前提下使用现存代码是需要技巧的。在本章里,你将学习到两种方式来达到这个目的:
1212

13-
1. 第一种方式直接了当。在新类中创建现有类的对象。这种方式叫做“组合”(**Composition**),通过这种方式复用代码的功能,而非其形式。
13+
1. 第一种方式直接了当。在新类中创建现有类的对象。这种方式叫做“组合”(Composition),通过这种方式复用代码的功能,而非其形式。
1414

15-
2. 第二种方式更为微妙。通过现有类创建新类。照字面理解:采用现有类形式,又无需在编码时改动其代码,这种方式就叫做“继承”(**Inheritance**)。**继承**是面向对象编程(**OOP**)的重要基础之一。更多功能相关将在[多态](./09-Polymorphism.md)**Polymorphism**)章节中介绍。
15+
2. 第二种方式更为微妙。通过现有类创建新类。照字面理解:采用现有类形式,又无需在编码时改动其代码,这种方式就叫做“继承”(Inheritance)。**继承**是面向对象编程(**OOP**)的重要基础之一。更多功能相关将在[多态](./09-Polymorphism.md)(Polymorphism)章节中介绍。
1616

1717
组合与继承的语法、行为上有许多相似的地方(这其实是有道理的,毕竟都是基于现有类型构建新的类型)。在本章中,你会学到这两种代码复用的方法。
1818

1919
<!-- Composition Syntax -->
2020
## 组合语法
21-
在前面的学习中,“组合”(**Composition**)已经被多次使用。你仅需要把对象的引用(**object references**)放置在一个新的类里,这就使用了组合。例如,假设你需要一个对象,其中内置了几个String对象,两个基本类型(**primitives**)的属性字段,一个自定义Class的对象。对于非基本类型对象,将引用直接放置在Class中,对于基本类型属性字段则仅进行声明(**define**)。
21+
22+
在前面的例子中,我们已经多次使用了**组合**:仅需把对象的引用放在一个新类即可。假设我们现在需要创建一个对象:它包含多个**字符串类型**字段、**基本类型**字段以及一个**自定义类型**字段。对于非基本类型字段,将对象引用直接放入新类中,对于基本类型字段则直接声明。
23+
24+
```java
2225
// reuse/SprinklerSystem.java
23-
// Composition for code reuse
26+
// 代码复用之组合
2427
class WaterSource {
25-
private String s;
26-
WaterSource() {
27-
System.out.println("WaterSource()");
28-
s = "Constructed";
29-
}
30-
@Override
31-
public String toString() { return s; }
32-
}
33-
public class SprinklerSystem {
34-
private String valve1, valve2, valve3, valve4;
35-
private WaterSource source = new WaterSource();
36-
private int i;
37-
private float f;
38-
@Override
39-
public String toString() {
40-
return
41-
"valve1 = " + valve1 + " " +
42-
"valve2 = " + valve2 + " " +
43-
"valve3 = " + valve3 + " " +
44-
"valve4 = " + valve4 + "\n" +
45-
"i = " + i + " " + "f = " + f + " " +
46-
"source = " + source; // [1]
28+
private String s;
29+
WaterSource() {
30+
System.out.println("WaterSource()");
31+
s = "Constructed";
32+
}
33+
34+
@Override
35+
public String toString() { return s; }
36+
}
37+
38+
public class SprinklerSystem {
39+
private String valve1, valve2, valve3, valve4;
40+
private WaterSource source = new WaterSource();
41+
private int i;
42+
private float f;
43+
44+
@Override
45+
public String toString() {
46+
return
47+
"valve1 = " + valve1 + " " +
48+
"valve2 = " + valve2 + " " +
49+
"valve3 = " + valve3 + " " +
50+
"valve4 = " + valve4 + "\n" +
51+
"i = " + i + " " + "f = " + f + " " +
52+
"source = " + source; // [1]
53+
}
54+
55+
public static void main(String[] args) {
56+
SprinklerSystem sprinklers = new SprinklerSystem();
57+
System.out.println(sprinklers);
58+
}
4759
}
48-
public static void main(String[] args) {
49-
SprinklerSystem sprinklers = new SprinklerSystem();
50-
System.out.println(sprinklers);
51-
}
52-
}
53-
/* Output:
60+
```
61+
62+
输出结果:
63+
64+
```
5465
WaterSource()
5566
valve1 = null valve2 = null valve3 = null valve4 = null
5667
i = 0 f = 0.0 source = Constructed
57-
*/
68+
```
69+
<!-- 此小节尚未翻译完全 -->
5870

5971
<!-- Inheritance Syntax -->
6072
## 继承语法

0 commit comments

Comments
 (0)