从内部 class 访问父方法时出现 StackOverflowError
StackOverflowError while accessing parent method from inner class
请帮我找出为什么在 运行 下面的代码时出现 WhosebugError 异常。
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();
}
}
我在这里尝试从内部 class.
访问父 class 方法
这是无限循环的原因:
HelloParent checking = new HelloParent();
删除它!
当您在 main
中创建一个新的 HelloParent
对象时,您又会在该对象中创建一个 HelloParent
对象,依此类推。这会导致您的堆栈填满并最终溢出。这会抛出 WhosebugError
.
希望对您有所帮助!
HelloParent
有一个实例字段,checking
,它是这样声明和初始化的:
HelloParent checking = new HelloParent();
该代码被插入到每个 HelloParent
构造函数*的开头。该代码 调用 HelloParent
构造函数,因此再次获得 运行,因此再次调用构造函数,因此再次获得 运行,等等,等等
您不能有一个实例字段调用它在其中定义的 class 的构造函数。
* 从技术上讲,就在调用 super()
.
之后(在本例中是隐含的)
Here I am trying to access parent class method from the inner class.
对于内部classes,正确的术语是"enclosing class"而不是"parent class",因为这里没有继承关系。
您可以通过调用 :
访问封闭实例(与您的 Hello
实例关联的 HelloParent
实例)的方法
public void printFunction() {
printHW("hello ");
}
或
public void printFunction() {
HelloParent.this.printHW("hello ");
}
您不需要在 HelloParent
class 中创建另一个 HelloParent
的实例(正如其他人所解释的,这是 WhosebugError
的原因),所以你可以删除 checking
变量。
请帮我找出为什么在 运行 下面的代码时出现 WhosebugError 异常。
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();
}
}
我在这里尝试从内部 class.
访问父 class 方法这是无限循环的原因:
HelloParent checking = new HelloParent();
删除它!
当您在 main
中创建一个新的 HelloParent
对象时,您又会在该对象中创建一个 HelloParent
对象,依此类推。这会导致您的堆栈填满并最终溢出。这会抛出 WhosebugError
.
希望对您有所帮助!
HelloParent
有一个实例字段,checking
,它是这样声明和初始化的:
HelloParent checking = new HelloParent();
该代码被插入到每个 HelloParent
构造函数*的开头。该代码 调用 HelloParent
构造函数,因此再次获得 运行,因此再次调用构造函数,因此再次获得 运行,等等,等等
您不能有一个实例字段调用它在其中定义的 class 的构造函数。
* 从技术上讲,就在调用 super()
.
Here I am trying to access parent class method from the inner class.
对于内部classes,正确的术语是"enclosing class"而不是"parent class",因为这里没有继承关系。
您可以通过调用 :
访问封闭实例(与您的Hello
实例关联的 HelloParent
实例)的方法
public void printFunction() {
printHW("hello ");
}
或
public void printFunction() {
HelloParent.this.printHW("hello ");
}
您不需要在 HelloParent
class 中创建另一个 HelloParent
的实例(正如其他人所解释的,这是 WhosebugError
的原因),所以你可以删除 checking
变量。