【发布时间】:2015-04-02 05:29:02
【问题描述】:
我有一个抽象类,它声明了许多对象引用,特别是一个 JLabel。我有两个类都扩展了该类。其中一个孩子实例化了 JLabel 并调用了它的几个方法。该类兄弟尝试调用 JLabel 上的 setText 方法,我得到一个 NullPointerException(实例化它的兄弟在另一个之前调用。)
我曾认为所有孩子都引用内存中的同一个对象,因此会修改同一个对象,但显然我错了。我该如何解决这个问题?
这是我的意思的一个例子:
public class BlahDriver
{
public static void main(String[] args)
{
BlahChildOne blah = new BlahChildOne();
BlahChildTwo blah2 = new BlahChildTwo();
}
}
public abstract class Blah
{
protected JLabel label;
}
public class BlahChildOne extends Blah
{
public BlahChildOne()
{
label = new JLabel();
}
}
public class BlahChildTwo extends Blah
{
public BlahChildTwo()
{
label.setText("Fred");
}
}
尝试 setText 时,我在 BlahChildTwo 处收到 NullPointerException。
【问题讨论】:
-
似乎没有必要显示任何代码,因为这是一个概念性问题,但我想我可以写一些
-
代码是必要的,因为
new的使用决定了如何在堆上创建对象。你如何做你所说的你所做的会有很大的不同。 -
BlahChildTwo调用 Blah 的构造函数,它从不实例化 JLabel。这意味着当您说label.setText()时,label为空。 “我以为所有的孩子都在内存中引用同一个对象”是错误的。
标签: java inheritance nullpointerexception abstract-class