File tree 1 file changed +2
-2
lines changed
1 file changed +2
-2
lines changed Original file line number Diff line number Diff line change @@ -503,7 +503,7 @@ class Derived extends PrivateOverride {
503
503
private f()
504
504
```
505
505
506
- 你可能期望输出是 ** public f()** ,然而 ** private** 方法可以当作是 ** final** 的,对于派生类来说是隐蔽的。因此,这里 ** Derived** 的 ` f() ` 是一个全新的方法;因为基类版本的 ` f() ` 屏蔽了 ** Derived** ,因此它都不算是重写方法。
506
+ 你可能期望输出是 ** public f()** ,然而 ** private** 方法可以当作是 ** final** 的,对于派生类来说是隐蔽的。因此,这里 ** Derived** 的 ` f() ` 是一个全新的方法;因为基类版本的 ` f() ` 屏蔽了 ** Derived** ,因此它都不算是重写方法。
507
507
508
508
结论是只有非 ** private** 方法才能被重写,但是得小心重写 ** private** 方法的现象,编译器不报错,但不会按我们所预期的执行。为了清晰起见,派生类中的方法名采用与基类中 ** private** 方法名不同的命名。
509
509
@@ -1236,7 +1236,7 @@ at RTTI.main
1236
1236
1237
1237
正如前面类图所示,** MoreUseful** 扩展了 ** Useful** 的接口。而 ** MoreUseful** 也继承了 ** Useful** ,所以它可以向上转型为 ** Useful** 。在 ` main() ` 方法中可以看到这种情况的发生。因为两个对象都是 ** Useful** 类型,所以对它们都可以调用 ` f() ` 和 ` g() ` 方法。如果试图调用 ` u() ` 方法(只存在于 ** MoreUseful** 中),就会得到编译时错误信息。
1238
1238
1239
- 为了访问 ** MoreUseful** 对象的扩展接口,就得尝试向下转型。如果转型为正确的类型,就转型成功。否则,就会得到 ClassCastException 异常。你不必为这个异常编写任何特殊代码,因为它指出了程序员在程序的任何地方都可能犯的错误。** {ThrowsException}** 注释标签告知本书的构建系统:在运行程序时,预期抛出一个异常。
1239
+ 为了访问 ** MoreUseful** 对象的扩展接口,就得尝试向下转型。如果转型为正确的类型,就转型成功。否则,就会得到 ClassCastException 异常。你不必为这个异常编写任何特殊代码,因为它指出了程序员在程序的任何地方都可能犯的错误。 ** {ThrowsException}** 注释标签告知本书的构建系统:在运行程序时,预期抛出一个异常。
1240
1240
1241
1241
RTTI 不仅仅包括简单的转型。例如,它还提供了一种方法,使你可以在试图向下转型前检查所要处理的类型。“类型信息”一章中会详细阐述运行时类型信息的方方面面。
1242
1242
You can’t perform that action at this time.
0 commit comments