在java中内部类和静态内部类有什么不同?
从Java教程:
嵌套类分为两类:静态和非静态。声明为静态的嵌套类简称为静态嵌套类。非静态嵌套类称为内部类。
静态嵌套类使用封闭的类名称访问:
OuterClass.StaticNestedClass
例如,要为静态嵌套类创建一个对象,请使用以下语法:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
作为内部类实例的对象存在于外部类实例中。考虑以下类别:
class OuterClass { ... class InnerClass { ... } }
InnerClass的实例只能存在于OuterClass的实例中,并且可以直接访问其封闭实例的方法和字段。
要实例化内部类,必须首先实例化外部类。然后,使用以下语法在外部对象内创建内部对象:
OuterClass outerObject = new OuterClass() OuterClass.InnerClass innerObject = outerObject.new InnerClass();
请参阅:Java教程
为了完整起见,还有一个没有封闭实例的内部类:
class A { int t() { return 1; } static A a = new A() { int t() { return 2; } }; }
这里,new A() { … }是在静态上下文中定义的内部类,没有封闭的实例。