我有一個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只覆蓋了位它需要。子是不是一個偉大的名字,考慮一個更好的根據是什麼子實際上做
public class TextWriter extends Writer{
@Override
public void process(){
process_subProcess();
//different final line
}
}
聯合代碼保護,這樣子類可以訪問它,但你可以不小心使用子方法從外包裝
不,這在Java中是不可能的。
如果您可以控制父類,則可以重構它以確保可以覆蓋相關部分。如果沒有,你真的沒有其他選擇。
不,你不能那樣做。
最好的方法是override這個方法在你的孩子班上,並做你的具體工作。
不,但您可以將兩個類之間差異的部分提取到另一個在每個類中以不同方式實現的方法。
不,你不能重寫某段代碼。首要的是與該方法不編寫一些代碼行