假設你有一個Cat類,他有一個Scratch(抓)成員函數,可是最終你發現有些貓的爪尖沒了,不能抓了,你可能想從Cat類派生一個叫ScratchlessCat(不能抓的貓)的類,然後覆蓋Scratch方法讓它什麼都不做。
這種方法是不可取的,修正這一問題的位置不在派生類,而是在最初的Cat類中,應該創建一個Claw(爪子)類並讓Cat類包含它,問題的根源在於做了所有貓能抓的假設
後半句不能理解:"在最初的Cat類中,應該創建一個Claw(爪子)類並讓Cat類包含它"。怎麼解決這個問題?包含Claw屬性,判斷該屬性是否存在嗎?
面向對象不是用來模擬現實世界的,它純粹是一種代碼設計的手段,目的就是最大限度使得程序簡單可維護。
就你的場景不能得出使用類的聚合代理繼承會更好,或者誰不可取的結論。
覆蓋的函數什麼都不寫很正常。在工程實踐中你可以看到這樣的代碼。