参考链接: Java嵌套静态类
嵌套类
Java允许在一个类定义另一个类,称为嵌套类 (Nested Classes),类似下面的形式
class OuterClass {
...
class NestedClass {
...
}
}
复制代码
内部类与静态嵌套类
嵌套类有静态和非静态两种,其中静态的称为静态嵌套类(static nested classes),非静态的称为内部类(Inner Classes) 一个嵌套类是包含它的外部类的一个成员,内部类能够访问外部类的其他成员,而静态嵌套类没有访问外部类的权限 作为外部类的成员,嵌套类能被声明为private, public, protected或者包内访问的访问权限。
静态嵌套类
静态嵌套类与静态类里面的方法类似,一个静态嵌套类不能直接调用外部类里面的实例变量或者方法,它只能通过对象引用访问他们。
Java官方文档的解释:
Note: A static nested class interacts with the instance members of its outer class (and other classes) just like any other top-level class. In effect, a static nested class is behaviorally a top-level class that has been nested in another top-level class for packaging convenience.
一个静态嵌套类与其他任何 top-level class 一样和他的外部类的其他成员相互作用。实际上,为了封装的便利性,一个静态嵌套类的作用机制和其他被封装的 top-level class相同。
由于静态嵌套类是通过外部类名来访问的:
OuterClass.StaticNestedClass
所以可以通过以下的语法来创建静态嵌套类的对象:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
至于内部类,因为它有权限访问外部类的成员,所以必须依赖一个外部类的实体对象,内部类自身又依赖于实例对象,所以内部类自身不能包含任何静态成员变量 (static)。但是内部类可以包含静态常量 static final 类型的成员。
转载于:https://juejin.im/post/5c56b4c1f265da2daa3129bd