通过外类调用内部类的方法

Adr*_*r83 2 java constructor inner-classes

我知道要实例化一个成员内部类,你有两个不同的构造函数:

第一:

Outer out = new Outer();
Outer.Inner in = out.new Inner();
Run Code Online (Sandbox Code Playgroud)

第二:

Outer.Inner in = new Outer().new Inner();
Run Code Online (Sandbox Code Playgroud)

现在,我不知道为什么这段代码会编译:

public class Outer {

    private String greeting="Hi";

    protected class Inner {
        public int repeat=3;

        public void go() {
            for (int i =0; i<repeat; i++) {
                System.out.println(greeting);
            }
        }
    }

    public void callInner() {
        Inner in = new Inner(); //in my opinion the correct constructor is Outer.Inner in = new Inner()
        in.go();
    }

    public static void main(String[] args) {
        Outer out = new Outer();
        out.callInner();

    }
}
Run Code Online (Sandbox Code Playgroud)

为什么编译?

非常感谢!

Eam*_*ion 6

当您InnerOuter(在实例方法内)的范围内实例化时,您不需要显式实例化引用Outerclas,如在您的示例中:

Outer.Inner in = new Outer().new Inner();
Run Code Online (Sandbox Code Playgroud)

只需引用即可实例化Inner:

 Inner in = new Inner();
Run Code Online (Sandbox Code Playgroud)

这适用于类中的所有实例方法,只要它们不是静态的.