基类
public class Base
{
public X obj;
public void setValue()
{
obj = new A();
}
}
Util类
public class Util extends Base
{
public X obj;
public Util(X obj)
{
this.obj = obj;
}
public void function1()
{
obj.m1(); //obj is null
}
public void function2()
{
obj.m2(); //obj is null
}
}
测试类
class Test extends Base
{
// obj inherited from superclass is null.
Util utilObj = new Util(obj)
public void testMethod()
{
utilObj.function1();
utilObj.function2();
}
}
我如何在util类的构造函数中传递初始化值,同时在Test类中创建它的对象,这样我就可以使用util class
的方法。它给出了Null指针异常。我不希望在每个setValue()
中公开Test class
方法的调用,而不能将其声明为静态。即public static X obj;
中的Base class
。
有没有办法直接在其子类中的任何超类方法中初始化的非静态变量的初始化值,如静态变量。请帮助解决这个问题。
答案 0 :(得分:0)
尝试使用super(); 你应该能够找到更多的信息 http://docs.oracle.com/javase/tutorial/java/IandI/super.html
答案 1 :(得分:0)
从public X obj;
课程中删除Util
行。该行在Util
中创建了一个不同的变量,该变量隐藏了Base
中的一个,因为它具有相同的名称。如果您从obj
移除Util
变量,则使用obj
方法编写Util
将获取Base
变量。
不要让Util
构造函数直接初始化obj
,而是给Base
一个构造函数是个好主意:
public Base(X obj)
{
this.obj = obj;
}
然后更改Util
构造函数来调用它:
public Util(X obj)
{
super(obj); // Calls Base constructor
}