以下设置:
public class Superclass
{
private String params;
public Superclass(String params)
{
this.params = params;
doStuff();
}
public void doStuff()
{
// uninteresting stuff
}
}
public class Subclass extends Superclass
{
private Object someObject;
public Subclass(String params, Object someObject)
{
super(params);
this.someObject = someObject;
}
@Override
public void doStuff()
{
someObject.toString(); // <- causes NullPointerException
}
}
父类(super class)创建一个用户界面,而子类应该创建一个更专业的版本。
从软件工程的角度来看,当“子类”仍然扩展“父类(super class)”时,防止 NullPointerException 的最简洁方法是什么?
最佳答案
父类在构造时没有明显的原因来调用doStuff
。
简单地说,不要将调用放在那里。这些类应该彼此独立地构建。父类不应依赖于子类的任何数据来完成其构造;在父级构造函数中调用的子级重写的任何方法都会引入此依赖项。
如果您确实发现需要在父级中调用额外的方法,那么您可以创建一个final
方法,并且不会发生不良影响,因为子级将无权访问该方法。
public class Superclass {
private String params;
public Superclass(String params) {
this.params = params;
doStuffParent();
}
public final void doStuffParent() {
// uninteresting stuff
}
public void doStuff() {
// uninteresting stuff...again?
}
}
关于java - NullPointerException 因为重写函数并被父类(super class)调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27884152/