Java 超类 catch 和子类 catch

Java superclass catch and subclass catch

我很困惑。以下两种说法准确吗?

  1. class 的对象不了解或访问其任何子class对象。

  2. 关于异常处理的主题,superclass catch 将捕获其所有子classes。

我认为有些逻辑我没有看到。在 1 中,superclass 不知道 subclass,而在 2 中,superclass 知道 subclass.如有任何澄清,我们将不胜感激。

两种说法都是正确的。当执行 "catch" 子句时,它会得到一个特定的异常实例。它可以查看该实例的 superclasses 并检查这些 superclasses 是否与 "catch" 子句中指定的 class 匹配。它不需要检查 "catch" 子句中指定的 class 的所有可能子 class,因此语句 1 成立。

是的,没错。

  1. class 的 object 不了解或访问其任何子class。

    Object就是parentclass。考虑一下它类似于现实世界 parents,他们事先不知道他们将拥有多少个孩子,他们将拥有什么额外的功能,或者除了我已经拥有的之外他们将要做什么即与 Object class 相同的功能,即 equals/hashCode/wait/notify 等。所以它安全地假设我的孩子会覆盖 say equals 如果没有 Object class 可以处理这些现有功能的一切。

  2. 关于异常处理的主题,一个超级class catch 将捕获它的所有子classes。

    是的。再次考虑与上面相同的示例。人们说“Jr. xyz 你好吗?”人们也认识你,可以像“嗨,pqr”一样问候你,人们也知道你的 parent 名字。类似的是这里的概念。如果它在 catch 块中看到完全匹配,它将执行同一个块,否则它将转到它的 parent catch 块。

超级class本身并不知道它的子classes,但是jvm知道这些,jvm正在做异常处理、多态性等工作