抽象内部 class 在非抽象外部 class 内

Abstract inner class within non-abstract outer class

我有一个超级class A,它有一个抽象的内部class内部,另一个class B扩展了A。为什么A不强制B实现抽象内在-class?

我已经看过here,但它只指定了非抽象的抽象方法classes。同样的原则适用于此吗?

public class A {
    ...

    abstract class Inner {
        ...
    }
}

public class B extends A { 
    ...

    // Isn't forcing me to implement Inner
}

内部 class,无论是否抽象,基本上都是 class 的语法糖,它具有对另一个 class 的实例的内置引用,它包含class。它嵌套的事实只是增加了潜在的可访问性限制。除此之外,它与任何其他 class 一样(减去对 static 成员的一些其他限制)。

在很多情况下,没有必要实施A.Inner。我最近在为 Java 使用 UI 的免费浏览器库。他们有一个 class Element 和子 class 像 Anchor, Input, Span, Script, Style.例如,您当然不想被迫实施 Element 的所有子 class 吗?当 superclass 是其他人代码的成员时尤其如此。说 superclass 可能有引用私有 subclasses.

的私有方法

因为这将是一个毫无意义的限制,除非 B 中的某些代码试图实例化 A.Inner,在这种情况下,现有规则已经捕获它。

如果您定义一个扩展抽象 class 的新具体 class,它必须实现这些方法。但是您还没有定义扩展 Inner 的新具体 class。您已经定义了一个扩展 A 的新 class B;从某种意义上说,B 继承了 Inner class,但它仍然是抽象的。 (您可以在某些情况下说 B.Inner,但从我的测试来看,编译器似乎将其视为与 A.Inner 相同。)