静态内部类与顶级类非常相似,除了内部类可以访问封闭类的所有 静态
变量和方法。封闭的类名有效地附加到内部类的包名称空间。通过将一个类声明为静态内部类,您在传达该类在某种程度上与封闭类的上下文紧密相关。
非静态内部类不太常见。主要区别在于,非静态内部类的实例包含对封闭类实例的隐式引用,因此可以访问该封闭类实例的实例变量和方法。这导致一些奇怪的实例化习惯用法,例如:
Levels levels = new Levels(); // first need an instance of the enclosing class// The items object contains an implicit reference to the levels objectLevels.Items items = levels.new Items();
与静态内部类相比,非静态内部类与其封闭类的联系更为紧密。它们具有有效的用途(例如,迭代器通常在其迭代的数据结构的类中被实现为非静态内部类)。
当您仅真正需要静态内部类行为时,声明一个非静态内部类是一个常见的错误。



