mirror of
https://github.com/LingCoder/OnJava8.git
synced 2026-08-23 14:33:28 +08:00
一些勘误 (#358)
* 更改了移位运算符中较有误导性的描述 “仅使用右侧的5 个低阶位” 中的“右侧”之前主语不明确,容易引起歧义。改为“仅使用右值的5 个低阶位” 则明确表示为等号右侧值的5个低阶位,使语义更清晰。 * 翻译勘误 ”数字的二进制表示称为有符号的两个补数。“这句的原文为“The binary representation of the numbers is referred to as signed twos complement”。这里的“2's complement” 为计算机术语“补码”,所以这句话应翻译为“数字的二进制表示形式是带符号的补码”。 * 内部类勘误 row:913 原文为Calleel,这里可能将1写成了字母l row:1429 原文为LocalInnerClass$1LocalCounter.class,根据我的理解应该为LocalInnerClass$LocalCounter.class,请主编校对
This commit is contained in:
@@ -910,7 +910,7 @@ Other operation
|
||||
3
|
||||
```
|
||||
|
||||
这个例子进一步展示了外围类实现一个接口与内部类实现此接口之间的区别。就代码而言,**Calleel** 是更简单的解决方式。**Callee2** 继承自 **MyIncrement**,后者已经有了一个不同的 `increment()` 方法,并且与 **Incrementable** 接口期望的 `increment()` 方法完全不相关。所以如果 **Callee2** 继承了 **MyIncrement**,就不能为了 **Incrementable** 的用途而覆盖 `increment()` 方法,于是只能使用内部类独立地实现 **Incrementable**,还要注意,当创建了一个内部类时,并没有在外围类的接口中添加东西,也没有修改外围类的接口。
|
||||
这个例子进一步展示了外围类实现一个接口与内部类实现此接口之间的区别。就代码而言,**Callee1** 是更简单的解决方式。**Callee2** 继承自 **MyIncrement**,后者已经有了一个不同的 `increment()` 方法,并且与 **Incrementable** 接口期望的 `increment()` 方法完全不相关。所以如果 **Callee2** 继承了 **MyIncrement**,就不能为了 **Incrementable** 的用途而覆盖 `increment()` 方法,于是只能使用内部类独立地实现 **Incrementable**,还要注意,当创建了一个内部类时,并没有在外围类的接口中添加东西,也没有修改外围类的接口。
|
||||
|
||||
注意,在 **Callee2** 中除了 `getCallbackReference()` 以外,其他成员都是 **private** 的。要想建立与外部世界的任何连接,接口 **Incrementable** 都是必需的。在这里可以看到,**interface** 是如何允许接口与接口的实现完全独立的。
|
||||
内部类 **Closure** 实现了 **Incrementable**,以提供一个返回 **Callee2** 的“钩子”(hook)-而且是一个安全的钩子。无论谁获得此 **Incrementable** 的引用,都只能调用 `increment()`,除此之外没有其他功能(不像指针那样,允许你做很多事情)。
|
||||
@@ -1426,7 +1426,7 @@ Anonymous inner 9
|
||||
```java
|
||||
Counter.class
|
||||
LocalInnerClass$1.class
|
||||
LocalInnerClass$1LocalCounter.class
|
||||
LocalInnerClass$LocalCounter.class
|
||||
LocalInnerClass.class
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user