【发布时间】:2019-01-05 21:06:53
【问题描述】:
假设我有两个类SuperClass 和SubClass 扩展SuperClass,如下所示:
public abstract class SuperClass {
private Object field1;
protected SuperClass(Object obj) {
setField1(obj);
}
public void setField1(Object obj) {
// perform some check on obj and
// then set field1 such that field1==obj
}
}
public class SubClass extends SuperClass {
public SubClass(Object obj) {
super(obj);
}
@Override
public void setField1(Object obj) {
super.setField1(obj);
// do some work that is necessary only when
// field1 is set through SubClass.setField1()
}
}
我需要的是,当我创建SubClass 的对象时,我需要从SuperClass 构造函数内部调用方法SuperClass.setField1(),而不是SubClass.setField1()。但是使用上面的代码,方法 SubClass.setField1() 被调用,这会导致 NullPointerException 被抛出,因为在 SubClass.setField1() 中完成的工作是在一个尚未为 null 的字段上执行的。
有没有办法从SuperClass构造函数内部显式调用SuperClass.setField1()?
【问题讨论】:
-
为什么会导致
NullPointerException被抛出? -
@zhh 因为重写方法中的额外工作是在
SubClass中声明但尚未实例化的字段上执行的,因为必须首先在@987654339 中调用super命令@构造函数。 -
NullPointerException 来自哪一行?能否请您粘贴整个代码如何调用构造函数以及传递给它的参数?
标签: java inheritance superclass subclassing overriding