java - 为什么我们不能以常规方式在外部类的主要方法中创建内部类的实例?

标签 java inner-classes outer-classes

我知道如何创建内部类的实例。但我想知道为什么我们不能通过以下方式做到这一点:

class outerclass{

      public static void main(String[] args){
              innerclass in=new innerclass();
      }

      class innerclass{


      }

}

如果我这样做,则会收到以下错误:

No enclosing instance of type outerclass is accessible. Must qualify the allocation with an enclosing instance of type outerclass (e.g. x.new A() where x is an instance of outerclass).

为什么?

最佳答案

class Demo{

    public static void main(String[] args){
            System.out.println(innerclass.a);

    }

    static class innerclass{
            static int a=1;

    }


}

给出输出 1。

看这里在把内部类设为static的时候你可以很容易的在你的外部类中访问,为了创建一个嵌套类的实例你必须通过在它前面加上外部类名来引用它,像这样:

Outer.Nested instance = new Outer.Nested();

非静态嵌套类(内部类) Java 中的非静态嵌套类也称为内部类。内部类与封闭类的实例相关联。因此,您必须首先创建封闭类的实例才能创建内部类的实例。这是一个内部类定义示例:

public class Outer {

  public class Inner {
  }

}

下面是创建内部类实例的方法:

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();

注意如何在外部类的引用之后放置 new 以创建内部类的实例。

非静态嵌套类(内部类)可以访问封闭类的字段,即使它们被声明为私有(private)。这是一个例子:

public class Outer {

    private String text = "I am private!";

    public class Inner {

        public void printText() {
            System.out.println(text);
        }
    }
}

关于java - 为什么我们不能以常规方式在外部类的主要方法中创建内部类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39328107/

相关文章:

java - 在 z3 中表示推理规则

java - Apache Santuario 签名元素位置

java - java内部类的排序 vector

java - 没有封闭类型的实例...在范围内

c++ - 从数据成员中获取非 POD 对象的地址,该数据成员是一次性嵌套类

java - wicket 如何更改导航器 css?

java - 如何在外部类中声明实例变量(内部类类型)?

c++ - 如何复制具有嵌套类(包含指向外部类的指针成员)的类的实例?

java - 具有外部类和内部类的数组

java - 使用布局 XML 文件的逻辑