请帮助我找到为什么在下面的代码中运行时为什么会得到StackOverflowError异常。

public class HelloParent {

    HelloParent checking = new HelloParent();

    public class Hello{

        public void printFunction() {
            checking.printHW("hello ");
        }

    }

    private void printHW(String s){
        System.out.println(s);
    }

    public static void main(String[] args) {
        HelloParent helloParent = new HelloParent();
        Hello hello = helloParent.new Hello();
        hello.printFunction();

    }
}


在这里,我尝试从内部类访问父类方法。

最佳答案

HelloParent有一个实例字段checking,它的声明和初始化如下:

HelloParent checking = new HelloParent();


该代码插入每个HelloParent构造函数*的开头。该代码调用HelloParent构造函数,因此再次运行,因此再次调用构造函数,因此再次运行,依此类推。

您不能有一个实例字段来调用其定义的类的构造函数。



*从技术上讲,在super()的调用(在这种情况下是隐式的)之后。

关于java - 从内部类访问父方法时发生StackOverflowError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44106817/

10-10 09:04