Skip to content

Commit a6fb15b

Browse files
authored
修改语句拗口问题 (lingcoder#626)
* 1 * 2 * 没有第三种形式吧? * 修改语句拗口问题 * 修改语句拗口问题 2 * 修改语句拗口问题 3 * 修改语句拗口问题 4 * 修改语句拗口问题 5 * 修改语句拗口问题 6 * 修改语句拗口问题 7 * 修改语句拗口问题 8 * 修改语句拗口问题 9 * 拗口问题 * 修改语句拗口问题 10 * 修改语句拗口问题 11 * 修改语句拗口问题 12 * 修改语句拗口问题 13 * 修改语句拗口问题 14 * 修改语句拗口问题 14 * 修改语句拗口问题 15
1 parent 3708ab3 commit a6fb15b

File tree

3 files changed

+39
-37
lines changed

3 files changed

+39
-37
lines changed

docs/book/08-Reuse.md

+12-10
Original file line numberDiff line numberDiff line change
@@ -690,9 +690,9 @@ doh(Milhouse)
690690

691691
````
692692

693-
**Homer** 的所有重载方法在 **Bart** 中都是可用的,尽管 **Bart** 引入了一种新的重载方法。正如你将在下一章中看到的那样,比起重载,更常见的是覆盖同名方法,使用与基类中完全相同的方法签名[^1]和返回类型。否则会让人感到困惑。
693+
**Homer** 的所有重载方法在 **Bart** 中都是可用的,尽管 **Bart** 引入了一种新的重载方法。正如你将在下一章中看到的那样,比起重载,更常见的是覆盖同名方法,使用与基类中完全相同的方法签名[^2]和返回类型。否则会让人感到困惑。
694694

695-
你已经看到了Java 5 **@Override**注解,它不是关键字,但是可以像使用关键字一样使用它。当你打算重写一个方法[^2]时,你可以选择添加这个注解,如果你不小心用了重载而不是重写,编译器会产生一个错误消息:
695+
你已经看到了Java 5 **@Override**注解,它不是关键字,但是可以像使用关键字一样使用它。当你打算重写一个方法[^3]时,你可以选择添加这个注解,如果你不小心用了重载而不是重写,编译器会产生一个错误消息:
696696

697697

698698
```java
@@ -712,12 +712,7 @@ class Lisa extends Homer {
712712

713713
**{WillNotCompile}** 标记将该文件排除在本书的 **Gradle** 构建之外,但是如果你手工编译它,你将看到:method does not override a method from its superclass.方法不会重写超类中的方法, **@Override** 注解能防止你意外地重载。
714714

715-
- **[1]** 方法签名——方法名和参数类型的合称
716-
717-
- **[2]** 重写——覆盖同名方法,使用与基类中完全相同的方法签名和返回类型[^3]
718-
719-
- **[3]** 在java 1.4版本以前,重写方法的返回值类型被要求必须与被重写方法一致,但是在java 5.0中放宽了这一个限制,添加了对协变返回类型的支持,在重写的时候,重写方法的返回值类型可以是被重写方法返回值类型的子类。
720-
715+
721716
<!-- Choosing Composition vs. Inheritance -->
722717

723718
## 组合与继承的选择
@@ -1182,8 +1177,6 @@ Java 标准类库就是一个很好的例子。尤其是 Java 1.0/1.1 的 **Vect
11821177

11831178
Java 1.0/1.1 标准类库中另一个重要的类是 **Hashtable**(后来被 **HashMap** 取代),它不含任何 **final** 方法。本书中其他地方也提到,很明显不同的类是由不同的人设计的。**Hashtable** 就比 **Vector** 中的方法名简洁得多,这又是一条证据。对于类库的使用者来说,这是一个本不应该如此草率的事情。这种不规则的情况造成用户需要做更多的工作——这是对粗糙的设计和代码的又一讽刺。
11841179

1185-
- **[1]** Java 1.4 开始已将 **Vector** 类大多数方法的 **final** 去掉
1186-
11871180
<!-- Initialization and Class Loading -->
11881181

11891182
## 类初始化和加载
@@ -1267,6 +1260,15 @@ j = 39
12671260

12681261
当开始设计一个系统时,记住程序开发是一个增量过程,正如人类学习。它依赖实验,你可以尽可能多做分析,然而在项目开始时仍然无法知道所有的答案。如果把项目视作一个有机的,进化着的生命去培养,而不是视为像摩天大楼一样快速见效,就能获得更多的成功和更迅速的反馈。继承和组合正是可以让你执行如此实验的面向对象编程中最基本的两个工具。
12691262

1263+
[^1]: Java 1.4 开始已将 **Vector** 类大多数方法的 **final** 去掉
1264+
1265+
[^2]: 方法签名——方法名和参数类型的合称
1266+
1267+
[^3]: 重写——覆盖同名方法,使用与基类中完全相同的方法签名和返回类型[^4]
1268+
1269+
[^4]: 在java 1.4版本以前,重写方法的返回值类型被要求必须与被重写方法一致,但是在java 5.0中放宽了这一个限制,添加了对协变返回类型的支持,在重写的时候,重写方法的返回值类型可以是被重写方法返回值类型的子类。
1270+
1271+
12701272
<!-- 分页 -->
12711273

12721274
<div style="page-break-after: always;"></div>

docs/book/11-Inner-Classes.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1434,7 +1434,7 @@ LocalInnerClass.class
14341434

14351435
虽然这种命名格式简单而直接,但它还是很健壮的,足以应对绝大多数情况[^1]。因为这是 Java 的标准命名方式,所以产生的文件自动都是平台无关的。(注意,为了保证你的内部类能起作用,Java 编译器会尽可能地转换它们。)
14361436

1437-
- **[1]** 另一方面,**$** 对Unix shell来说是一个元字符,所以当你列出.class文件时,有时会遇到麻烦。这对基于Unix的Sun公司来说有点奇怪。我的猜测是,他们没有考虑这个问题,而是认为你会很自然地关注源代码文件。
1437+
[^1]: 另一方面,**$** 对Unix shell来说是一个元字符,所以当你列出.class文件时,有时会遇到麻烦。这对基于Unix的Sun公司来说有点奇怪。我的猜测是,他们没有考虑这个问题,而是认为你会很自然地关注源代码文件。
14381438

14391439
<!-- Summary -->
14401440
## 本章小结

0 commit comments

Comments
 (0)