【问题标题】:Instantiating static nested classes without qualifying with enclosing class实例化静态嵌套类而不用封闭类限定
【发布时间】:2013-04-24 17:02:03
【问题描述】:
class OuterClass {
  static class StaticNestedClass {}
}

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

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

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

  StaticNestedClass nestedObject =
                      new StaticNestedClass();

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

【问题讨论】:

  • 没有 OuterClass 限定在哪里实例化?
  • @Rob Watts 先生,我在一个 java 文件中创建了一个 OuterClass 类及其嵌套类,然后在同一个包中创建了一个新类,我在其中实例化了 Outerclass 的嵌套类。谢谢先生...

标签: java static nested


【解决方案1】:

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

如果类被导入,其他类中的代码也可以使用不合格的StaticNestedClass 标识符:

import OuterClass.StaticNestedClass;

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 2012-10-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多