Java 中内部类和静态嵌套类的主要区别是什么?设计/实现是否在选择其中一个方面发挥作用?
最佳答案
来自Java Tutorial :
Nested classes are divided into two categories: static and non-static. Nested classes that are declared static are simply called static nested classes. Non-static nested classes are called inner classes.
使用封闭类名访问静态嵌套类:
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 Tutorial - Nested Classes
为了完整起见,还有一个类似 inner class without an enclosing instance 的东西。 :
class A {
int t() { return 1; }
static A a = new A() { int t() { return 2; } };
}
这里,new A() { ... }
是一个在静态上下文中定义的内部类,并且没有封闭实例。
关于Java内部类和静态嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59327529/