首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

繼承關係中的「等價」與「類似」:替換原則的深度解析

     編輯:Java 相關知識

兩種繼承關係的本質差異

等價關係:純粹替換

  • 衍生類別只覆寫、不新增介面;
  • 衍生類別物件完美替換基底類別物件;
  • 關係語意:「是一種」(Is-a)——「圓是一種形狀」。
  • 理想的繼承方式,符合里氏替換原則(LSP)。

類似關係:擴充介面

  • 衍生類別新增方法,介面變大;
  • 仍可替換基底類別,但基底類別參考無法呼叫新方法;
  • 關係語意:「類似」(Like-a)——「冷暖氣機類似冷氣機,但功能更多」。
  • 現有系統只認得舊介面(冷氣控制),新功能(暖氣)無法被使用。

經典比喻:冷氣機 vs 冷暖氣機

房間只裝了「製冷」控制介面。換成「冷暖氣機」:

  • 製冷功能正常運作(介面相容);
  • 製熱功能無法被房間系統存取(介面未擴充);
  • 這就是類似關係:新型別擴充了介面,但舊系統不知情。

設計啟示

里氏替換原則(LSP)

Barbara Liskov 提出:子類別必須能替換其基底類別,且不影響程式正確性。等價關係天然符合 LSP;類似關係若濫用(如覆寫方法拋出新例外、改變語意),會違反 LSP,導致執行期驚喜。

總結

繼承不只是「重用程式碼」,更是「定義型別關係」。區分「等價」與「類似」,能幫助你決定:是單純特化(等價),還是擴充介面(類似)?這直接影響系統的可維護性與擴充性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
場景建議
衍生類別無新增行為,純粹特化採用等價關係,完美替換
需要新增公共介面方法類似關係,但需評估:是否應擴充基底介面?
新增方法屬於特定子類別專有類似關係可接受,但避免過度使用