[英]How to call the superclass implementation of an overridden method from inside the superclass in Java?
假设我有两个类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
不是SubClass.setField1()
调用方法SuperClass.setField1()
SubClass.setField1()
。 但是使用上面的代码,将调用方法SubClass.setField1()
,这将引发NullPointerException
,因为在SubClass.setField1()
中完成的工作是在尚未为null的字段上执行的。
有没有什么办法来显式调用SuperClass.setField1()
从内部SuperClass
的构造函数?
您可以将所述方法主体移至私有方法,然后将默认方法(该方法可能被子类覆盖)委托给前者。 看这个例子
public abstract class SuperClass {
private Object field1;
protected SuperClass(Object obj){
// call the safe implementation
setField1Safe(obj);
}
public void setField1(Object obj){
// just delegates
setField1Safe(obj);
}
private void setField1Safe(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()
}
}
这样子类仍然可以覆盖setField1
但是如果您确实依赖于实现,则可以调用私有的setField1Safe
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.