🎯 什麼情境該想到我
當你「一個子類只用到、甚至根本不想要父類傳下來的部分方法與資料」的時候——它繼承了一堆用不上、甚至不該有的東西。
⚙️ 怎麼用(步驟 / 公式)
這味道是什麼徵兆:子類拒絕接受父類的遺贈,通常代表繼承關係用錯了——它們其實不是「是一種(is-a)」的關係,只是想重用一點碼而硬套繼承。若子類覆寫父類方法讓它報錯或什麼都不做,那是更強烈的警訊。
通常用哪些重構手法對治:
- 以委託取代子類(Replace Subclass with Delegate)/以委託取代父類(Replace Superclass with Delegate):當繼承關係不恰當時,改用委託來重用,關係更誠實。
- 下移函式(Push Down Method)/下移欄位(Push Down Field):若只是父類把「只有部分子類要用」的成員放太高,把它們下移到真正需要的子類。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 子類「用不到父類全部」其實相當常見,作者認為這種輕微情況通常不必大動干戈。
- 只有當「拒絕遺贈」造成困惑或錯誤(尤其是拒絕父類的介面/行為)時才值得重構。
🔗 相關工具
- 內幕交易 Insider Trading(繼承造成的過度耦合)
- 異曲同工的類別 Alternative Classes with Different Interfaces(改用委託後可能需要對齊介面)
- 重構