我有一个类Writer
,其方法为process()
。子类TextWriter
扩展Writer
。
我想使用父类的方法process()
,除了方法的最后一行,我想根据子类的需要进行自定义。
有什么方法可以调用super()
,这样我只能继承父类方法的特定部分?
我知道这是糟糕的设计,在这种情况下必须使用接口。但我正在努力对一些旧代码进行一些更改,我想知道是否可以这样做。
答案 0 :(得分:3)
不,这在Java中是不可能的。
如果您可以控制父类,则可以重构它以确保可以覆盖相关部分。如果没有,你真的没有其他选择。
答案 1 :(得分:2)
您应该将联合代码放在受保护的方法中,并让进程方法调用它,如:
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方法
答案 2 :(得分:1)
不,但您可以将两个类之间不同的部分提取到另一个在每个类中实现不同的方法。
答案 3 :(得分:1)
不,你不能覆盖某段代码。覆盖与方法无关,而不是某些代码行
答案 4 :(得分:0)
不,你不能那样做。
最好的办法是override你孩子班中的那种方法并做你的具体工作。