Java内部类和静态嵌套类

问题:

Java中的内部类和静态嵌套类之间的主要区别是什么?设计/实施是否在选择其中的一个方面发挥作用?

回答:

Java Tutorial

嵌套类分为静态和非静态两类。声明为静态的嵌套类简称为静态嵌套类。非静态嵌套类称为内部类。

使用封闭类名访问静态嵌套类:

OuterClass.StaticNestedClass

例如,要为静态嵌套类创建一个对象,请使用以下语法:

OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();

内部类的实例的对象存在于外部类的实例中。考虑以下几类:

class OuterClass {
    ...
    class InnerClass {
        ...
    }
}

InnerClass的一个实例只能在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() { ... }inner class defined in a static context,没有封闭的实例。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Java inner class and static nested class

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

4 + 1 =