1 回答
TA贡献1831条经验 获得超10个赞
您可以将所述方法体移动到私有方法,并让默认方法(可能被子类覆盖的方法)委托给前者。看这个例子
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方法。
添加回答
举报