实例化静态嵌套类而不限定封闭类

时间:2013-04-24 17:02:03

标签: java static nested

class OuterClass {
  static class StaticNestedClass {}
}

上面的StaticNestedClass通过以下语法实例化。

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

这很容易理解,但我的问题是,通过以下代码实例化相同的嵌套类,而不使用外部类

  StaticNestedClass nestedObject =
                      new StaticNestedClass();

请解释为什么它不需要OuterClass的资格并且仍然编译 感谢

2 个答案:

答案 0 :(得分:3)

这一切都取决于代码的位置和(如果适用)import语句的内容。 OuterClass中的任何代码都会自动了解OuterClass的成员,包括任何嵌套类(静态或非静态)。

如果导入了类,其他类中的代码也可以使用非限定StaticNestedClass标识符:

import OuterClass.StaticNestedClass;

public class Elsewhere {
    StaticNestedClass nested = new StaticNestedClass();
    . . .
}

如果没有import,则类Elsewhere中的代码需要使用限定类名OuterClass.StaticNestedClass

答案 1 :(得分:1)

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

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