在When to use an interface instead of an abstract class and vice versa?如何確定的一類根據阿米爾性質(摘要和接口)
的關係時得到一個抽象類,所述 派生類和基類之間的關係是「是一種'關係。例如狗 是動物,羊是動物,這意味着派生類是 繼承了基類的一些屬性。
而對於接口的實現,關係是「can be」。例如,狗可以是間諜狗。狗可以是馬戲團的狗。狗 可以是種族狗。這意味着你實現了某些方法來獲取一些東西 。
但是能力如何?例如,「狗可以吠叫」,「貓可以跳躍」,「蛇可以滑動」,我會在哪裏將它們放在抽象或界面中?
對所有的動物都有共同的東西(比如呼吸和移動)不是更好嗎,是他們派生的抽象類的一部分嗎?這樣你就不必讓所有的派生實現都具有相同的接口。 – Memfisto
這超出了我的想法,你可能會爭論任何一種方式。主要問題是,如果你不想在從* Animal *派生的東西中包含一個方法,那麼你必須重構整個* Animal *類或者編寫第二個* Animal *類。 這對接口來說很簡單:你只是不使用那個接口。 – Toneo
當然,但一些必需品不可能改變。如果他們這樣做,你可以用一個空白的方法重新實現它們作爲最壞的情況。但我同意,在更改代碼時,添加/刪除界面是更簡單的解決方案。 – Memfisto