嵌套类
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
类型的成员。