执行此操作的正常方法是将父类声明为抽象,并声明该方法应该存在。孙子类将提供该方法的一个版本。例如:
public abstract class Doubler {
int a;
public Doubler(int a) {
this.a = a;
}
abstract int modifyResult(int aResult);
int calculate() {
int rv = a * 2;
return modifyResult(rv);
}
}
public class DoublerAndAdder extends Doubler {
int b;
public DoublerAndAdder(int a, int b) {
super(a);
this.b = b;
}
@Override
public int modifyResult(int aResult) {
return aResult + b;
}
}
calculate()
modifyResult()
即使modifyResult()
声明为抽象且没有实现,也允许调用。调用DoublerAndAdder.calculate()
将运行Doubler.calculate()
,它将调用DoublerAndAdder.modifyResult()
。
如果你不能使父类抽象,父类可以提供一个不做任何事情的方法版本:
public abstract class Doubler {
int a;
public Doubler(int a) {
this.a = a;
}
public int modifyResult(int aResult) {
return aResult;
}
int calculate() {
int rv = a * 2;
return modifyResult(rv);
}
}