从规范的角度来看,问题中提出的区别是完全合理的:
内部类具有对其施加的限制,这与封闭实例的问题无关(例如,它可能没有静态成员);
静态嵌套类的概念基本上只是命名空间;这些类可以正确地称为 顶级类 ,以及我们通常认为的顶级类。
恰好发生这样的情况,即
static从嵌套类声明中删除会同时做两件事:
- 它使类需要一个封闭的实例;
- 它使班级 内部化 。
我们很少将 内部 视为限制。我们只关注 包含实例的 关注点,这一点更加明显。但是,从规范的角度来看,这些限制是至关重要的。
我们缺少的是一个 需要封闭实例的类 的术语。JLS并没有定义这样的术语,因此我们(似乎没有意识到)劫持了一个相关的术语,但实际上是本质上不同的术语。



