如何调用内部类构造函数?

St.*_*rio 0 java constructor

我有以下课程:

package org.gradle;

public class Supcl {

    public class Inner extends Supsupcl {
        public Inner(int a) {
            System.out.println(a);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

package org.gradle;

public class Subcl extends Supcl.Inner {

    public Subcl() {
        Supcl.Inner.super(34); //error: No enclosing instance of type Supcl is 
                               //available due to some 
                               //intermediate constructor invocation

    }
}
Run Code Online (Sandbox Code Playgroud)

和班级Supsupcl:

package org.gradle;

public class Supsupcl {}
Run Code Online (Sandbox Code Playgroud)

如果我尝试更换Supcl.Inner.super(34);super(34);同样的错误会发生.怎么办?

Men*_*ena 5

您正在引用嵌套到实例的内部类Supcl,因此初始化内部类的正确习惯是:

new Supcl().new Inner(int i)
(assuming Supcl has a 0-argument constructor or the default constructor)
Run Code Online (Sandbox Code Playgroud)

您无法super在构造函数外部调用,因此您必须将其作为Inner(int i)构造函数代码的第一行调用.

  • `super()`在`Inner(int i)`中被隐式调用,所以没有必要这样做.此外,它没有多大帮助. (3认同)