是否有与嵌套类关联的构造函数

cha*_*itu 7 java constructor inner-classes

我想知道是否有任何构造函数涉及内部类.例如,考虑下面给出的代码片段

class MyOuter
{
   private int x= 10;

   class MyInner
   {
      void dostuff(){
         System.out.println("The value of x is "+x);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

在另一个java文件中,我为MyOuter和MyInner类创建实例,如下所示

Class Program
{
   public static void main(String [] args)
   {
      MyOuter mo = new MyOuter();
      MyOuter.MyInner mi = mo.new MyInner();
      mi.dostuff();
   }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码片段编译得很好并且输出"x的值是10".

我想知道的是当new()与MyInner类和MyOuter类一起使用时是否调用构造函数.如果是,那么是否有任何构造函数从内部类链接到外部类(如子类调用超类的构造函数,依此类推).

das*_*h1e 12

扩展内部类时,可以观察内部类的构造函数链.

举个例子:

public class MainClass {

    public MainClass(String value) {
        System.out.println("mainValue: " + value);
    }

    public class NestedClass {

        public NestedClass(String nestedValue) {
            System.out.println("nestedValue: " + nestedValue);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

然后像这样扩展NestedClass

public class NestedClassExtension extends NestedClass {

    public NestedClassExtension(MainClass mainClass, String nestedValue) {
        mainClass.super(nestedValue);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以你可以看到,你可以到你的嵌套类传球的超级构造函数中调用该构造函数MainClass,并呼吁.supermainClass对象实例.

现在,您可以通过以下方式创建NestedClassExtension实例:

NestedClassExtension extension = new NestedClassExtension(new MainClass("main"), "nested");
Run Code Online (Sandbox Code Playgroud)

所以主类必须存在,并且它的构造函数首先被调用.然后是嵌套类的构造函数.

相反,如果你想NestedClassMainClass你必须写的外面创建一个实例:

MainClass mc = new MainClass("main");
mc.new NestedClass("nested");
Run Code Online (Sandbox Code Playgroud)

另一次,MainClass必须首先创建,然后是嵌套类.