Java 非抽象外部类中的抽象内部类

Java 非抽象外部类中的抽象内部类,java,abstract-class,abstract,Java,Abstract Class,Abstract,我有一个超类a和一个抽象的内部类,还有一个扩展了a的类B。为什么a不强制B实现抽象的内部类呢 我已经看过了,但它只在非抽象类中指定抽象方法。同样的原则在这里适用吗 public class A { ... abstract class Inner { ... } } public class B extends A { ... // Isn't forcing me to implement Inner } 一个内部类,不管它是抽

我有一个超类a和一个抽象的内部类,还有一个扩展了a的类B。为什么a不强制B实现抽象的内部类呢

我已经看过了,但它只在非抽象类中指定抽象方法。同样的原则在这里适用吗

public class A {
    ...

    abstract class Inner {
        ...
    }
}

public class B extends A { 
    ...

    // Isn't forcing me to implement Inner
}

一个内部类,不管它是抽象的还是非抽象的,基本上都是一个类的语法糖,这个类有一个对另一个类(它的封闭类)实例的内置引用。它是嵌套的这一事实只是增加了潜在的可访问性限制。除此之外,它与任何其他类一样(减去对
静态成员的一些其他限制)

在许多情况下,不需要实现
A.internal
。我最近正在使用一个面向Java的无UI浏览器库。他们有一个类
元素
,其子类包括
锚定
输入
Span
脚本
样式
。例如,您肯定不想被迫实现
元素
的所有子类?当超类是其他代码的成员时尤其如此。所述超类可能具有引用私有子类的私有方法。

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

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