首頁 » 物件導向 » 物件導向觀念之繼承vs介面

物件導向觀念之繼承vs介面

作者:

分類:

這是剛深入物件導向迷宮的工程師會提出的疑問“繼承(Inheritance)介面(Interface)同樣有繼承的概念,這兩者之間有甚麼區別?”,在多年前自己還是個新手時,我也曾提出一樣的問題。

以前上課時應該都聽過物件導向的三大特性:封裝、繼承、多型,實際在職場運用突然蹦了一個介面,同樣都要先定義一個基礎給物件繼承用,差別在繼承可以實作abstract、virtual。

I know, but why?…I don’t get it. 同事臉上仍是疑惑

從程式碼上看起來都可以做到定義共同屬性、方法的需求,差別在關聯性的強與弱。自己會想像成繼承是定義縱向的關係,介面是定義橫向的關係。

根據SOLID原則(LSP),繼承時從父類別衍伸出各種子類別,需要完全實作出父類別定義的方法,可以覆寫(override)虛擬方法,但不應脫離父類別的定義。反之介面的關聯性就較弱,通常是用在物件之間的溝通,只要符合這介面的規範即可,可參考SOLID原則(ISPDIP)的說明。

「cian」的個人頭像