我有一个Writer
有方法的类process()
。一个子类TextWriter
, 扩展Writer
。
我想使用process()
父类的方法,除了方法的最后一行,我想根据子类的需要自定义。
有什么方法可以super()
让我只继承父类方法的特定部分吗?
我知道这是不好的设计,在这种情况下必须使用接口。但是我正在对一些旧代码进行一些更改,我想知道是否可以这样做。
我有一个Writer
有方法的类process()
。一个子类TextWriter
, 扩展Writer
。
我想使用process()
父类的方法,除了方法的最后一行,我想根据子类的需要自定义。
有什么方法可以super()
让我只继承父类方法的特定部分吗?
我知道这是不好的设计,在这种情况下必须使用接口。但是我正在对一些旧代码进行一些更改,我想知道是否可以这样做。
您应该将联合代码放在受保护的方法中,并让流程方法调用它,例如:
public class Writer {
protected void process_subProcess(){
//most of process code
}
public void process(){
process_subProcess();
//specific last line
}
}
然后 TextWriter 只覆盖它需要的位。subProcess 不是一个好名字,根据 subProcess 的实际作用考虑一个更好的名字
public class TextWriter extends Writer{
@Override
public void process(){
process_subProcess();
//different final line
}
}
联合代码受到保护,以便子类可以访问它,但您不能意外使用包外部的 subProcess 方法
不,这在 Java 中是不可能的。
如果您可以控制父类,则可以对其进行重构以确保可以覆盖相关部分。如果没有,你真的没有其他选择。
不,但是您可以将两个类之间不同的部分提取到您在每个类中以不同方式实现的另一种方法。
不,您不能覆盖某段代码。覆盖与方法有关,而不是与某些代码行有关
不,你不能那样做。
最好的方法是在您的子类中覆盖该方法并完成您的特定工作。