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()。多寫幾個例子,慢慢琢磨,是有點難懂。
遇到的次數多了,就慢慢會記住了