我正在尝试编写一个通用的GUI类,其中包含所有不同且更具体的GUI使用的主要方法。
public class GeneralGUI extends javax.swing.JFrame {
protected javax.swing.JTextArea logTextArea;
protected void say(String s) {
logTextArea.append(s + "\n");
}
}
子类类包含:
public class SpecificGUI extends GeneralGUI {
protected javax.swing.JTextArea logTextArea;
[...]
private void initComponents() {
[...]
logTextArea = new javax.swing.JTextArea();
}
}
我想要的是当我打电话时
SpecificGUI myGUI = new SpecificGUI();
myGUI.say("Ciao!");
将
"Ciao!"
字符串附加到myGUI.logTextArea
,但这不会发生:它会抛出Null Pointer Exc,因为它正在查找属于GeneralGUI的logTextArea
,该对象尚未实例化。1)为什么会这样?
2)如何达到目标效果?
谢谢!
编辑:
我尝试删除子类中的变量声明:由于它是我通过netbeans设计的GUI,因此netbeans不会让我删除该声明!
最佳答案
1)您已经回答了这个问题-父类的say()
方法,它正在父类中声明它的logTextArea
中寻找。您在子类中对该字段的重新声明会创建另一个字段,该字段对父类隐藏同名字段。
2)只需删除子类中另一个logTextArea
的声明。
如果确实需要子类中具有相同名称的另一个字段,则可以通过super.logTextArea
访问(隐藏)父字段。