前言
JBuilder 2005 提供強大的重構工具,能在類繼承階層中靈活搬遷方法與欄位(欄位/屬性)。本文以「動物」繼承體系為例,示範 Push Down(下移) 與 Pull Up(上推) 的實際操作流程與關鍵細節。
範例類別結構
Animal(父類別):含 weight、volume 兩欄位,與 howl() 方法。
Cat、Horse(子類別)繼承 Animal。

1. 方法搬遷
Push Down Method(下移方法)
- 開啟
Animal.java,游標置於 howl() 方法。
- Ctrl+Shift+R → Push Down Method。
- 對話框中:
- Method:選擇欲下移的方法。
- Keep as abstract in current class:勾選則將父類別轉為 abstract,保留方法宣告。
- Selected subclasses:預設全選,可取消勾選(例:僅下移至
Horse)。
關鍵行為: 若方法引用父類別 private 欄位(如 volume),下移後該欄位會自動提升為 protected 以供子類別存取。

Pull Up Method(上推方法)
- 開啟子類別(如
Horse.java),游標置於已下移的 howl()。
- Ctrl+Shift+R → Pull Up Method。
- 若方法依賴其他成員,會列於 Select dependent members to move,建議一併上推。

設計原則: 發現子類別共享相同邏輯時,上推至父類別可提升複用性、減少重複。
2. 欄位搬遷
Push Down Field(下移欄位)
- 游標置於
Animal 的 volume 欄位。
- Ctrl+Shift+R → Push Down Field。
- 對話框:
- Select subclasses:勾選目標子類別(例:僅
Cat)。
- Select dependent members to move:JBuilder 會分析賦值關聯(如
volume = weight),列出關聯欄位供選擇是否一併下移。

Pull Up Field(上推欄位)
- 在子類別(
Horse)游標置於 volume。
- Ctrl+Shift+R → Pull Up Field。

⚠️ 重要限制提醒
上推欄位不會自動分析關聯欄位。 若欄位初始化運算式引用其他欄位(如 volume = weight),上推後可能在父類別找不到 weight 導致編譯錯誤,需手動修正。
總結
- 方法上推/下移:支援依賴分析,較完整。
- 欄位下移:支援關聯欄位一併移動。
- 欄位上推:僅移動宣告行,不處理關聯,需人工檢查。