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();
最终执行结果截图:
跟上面的非常类似,我不相信解释了。
关键要理解,Child继承Parent,如果他自己实现了show()方法,即使在父类中调用show(),其实执行的还是Child类中的show()。多写几个例子,慢慢琢磨,是有点难懂。
遇到的次数多了,就慢慢会记住了