子类和父类方法循环调用,栈溢出错误分析

1、工作中遇到了一个问题,执行抛出错误

子类和父类方法循环调用,栈溢出错误分析_第1张图片

这是一个栈溢出的错误。

分析代码,原因是,一个对话框类间接继承了java.awt.Dialog和java.awt.Component,又自己实现了show()方法,在show方法中调用了super.setVisible(true)。

Component类中setVisible(true)→show(true);→show()

show(true);其实执行的是对话框类的show方法。这样,对话框的show()→super.setVisible(true)说明:component类的setVisible()方法→show(true);→show()说明:对话的show()方法,造成循环调来调去,没玩没了快哭了。所以就发生了栈溢出的错误。

 

2、下面是自己写的一个样例,大家可以看看。

Parent类

package com.learn;

public class Parent {
 
 public void show() {
  System.out.println("Parent Class's show method");
 }

 public void setVisible(boolean flag) {
  if (flag) {
   show();
  }
  else {
   hide();
  }
 }

 public void hide() {
  System.out.println("Parent Class's hide method");
 }
}

 

Child类:

package com.learn;

public class Child extends Parent{

 @Override
 public void show() {
  System.out.println("Child Class's show method");
  super.setVisible(true);
 }
}

Main类代码:

  Parent obj = new Child();
  obj.show();

最终执行结果截图:

子类和父类方法循环调用,栈溢出错误分析_第2张图片

 

跟上面的非常类似,我不相信解释了。

关键要理解,Child继承Parent,如果他自己实现了show()方法,即使在父类中调用show(),其实执行的还是Child类中的show()。多写几个例子,慢慢琢磨,是有点难懂。

遇到的次数多了,就慢慢会记住了大笑

你可能感兴趣的:(栈溢出,循环调用,setVisible)