diff --git a/docs/book/09-Polymorphism.md b/docs/book/09-Polymorphism.md index aa1b55c..de16a6a 100644 --- a/docs/book/09-Polymorphism.md +++ b/docs/book/09-Polymorphism.md @@ -153,7 +153,7 @@ Brass.play() MIDDLE_C ## 转机 -运行程序后会看到 **Music.java** 的难点。**Wind.play()** 的输出结果正是我们期望的,但它看起来似乎不能产生我们所期望的结果。观察 `tune()` 方法: +运行程序后会看到 **Music.java** 的难点。**Wind.play()** 的输出结果正是我们期望的,然而它看起来似乎不应该得出这样的结果。观察 `tune()` 方法: ```java public static void tune(Instrument i) { @@ -194,7 +194,7 @@ Shape s = new Circle(); 这会创建一个 **Circle** 对象,引用被赋值给 **Shape** 类型的变量 s,这看似错误(将一种类型赋值给另一种类型),然而是没问题的,因此从继承上可认为圆(Circle)就是一个形状(Shape)。因此编译器认可了赋值语句,没有报错。 -假设你调用了一个基类方法(在派生类中都被覆写): +假设你调用了一个基类方法(在各个派生类中都被覆写): ```java s.draw() @@ -202,7 +202,7 @@ s.draw() 你可能再次认为 **Shape** 的 `draw()` 方法被调用,因为 s 是一个 **Shape** 引用——编译器怎么可能知道要做其他的事呢?然而,由于后期绑定(多态)被调用的是 **Circle** 的 `draw()` 方法,这是正确的。 -下面的例子稍微有些不同。首先让我们创建一个可复用的 **Shape** 类库,基类 **Shape** 中建立了所有继承自 **Shape** 的类的共同接口——所有的形状都可以被绘画和擦除: +下面的例子稍微有些不同。首先让我们创建一个可复用的 **Shape** 类库,基类 **Shape** 为从它继承的所有子类建立了公共接口——所有的形状都可以被绘画和擦除: ```java // polymorphism/shape/Shape.java @@ -1252,4 +1252,4 @@ RTTI 不仅仅包括简单的转型。例如,它还提供了一种方法,使 -
\ No newline at end of file +