1
class OuterClass {
  static class StaticNestedClass {}
}

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

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

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

  StaticNestedClass nestedObject =
                      new StaticNestedClass();

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

4

2 回答 2

3

这一切都取决于代码在哪里以及(如果适用)import语句是什么。中的任何代码都会OuterClass自动知道 的成员OuterClass,包括任何嵌套类(静态或非静态)。

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

import OuterClass.StaticNestedClass;

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

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

于 2013-04-24T17:05:13.870 回答
1

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

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

于 2013-04-24T17:05:04.747 回答