Is-a & Has-a

在面向對象設計、面向對象程序設計等領域,Is-a描述的是類的父子繼承關系。

當一個類S繼承另外一個類F時,我們一般會說這是子類S繼承父類F,或說類F是類S的父類。換句話說即為

S is a F .

S被包含在F內,或說F包含S。更為一般得說,概念體S物是概念體F物的特殊化,而概念體S物是概念體F物的一般化。

舉例:

三角形是一個多邊形;外科醫生是一個醫生;蘋果是一個水果······

那如果說

黑板是一個教室。

顯然,黑板怎么可能是教室呢?這明顯不滿足‘Is-a’關系。但是退一步思考,黑板和教室的確是有關聯的,這點是不可否認的。只是它們之間的關系并非‘Is-a’,而是‘Has-a’。
如果說

教室有一個黑板。

這樣就更加符合邏輯了,在面向對象程序設計中,這表示教室帶有黑板的實例變量。也就是說教室會有一個黑板的引用,但是教室并沒有繼承黑板。


Summary:

在實際面向對象編程過程中,如果想知道某物是否應該繼承另一物時,就可以使用‘Is-a’測試來檢驗。

Is-a測試適用于在繼承層次的任何地方。如果你的繼承層次樹設計得很好,那么所有的子類都應該通過任何一個上層父類的Is-a測試。

參考:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,767評論 18 399
  • 前幾日看到一個小故事,一個小男孩和爸爸一起到沙灘上玩,發現由于某種原因,上百條小魚擱淺在沙灘上,正奮力掙扎,盡力擺...
    王學慧閱讀 135評論 0 0
  • 上一份工作的時候,同事與經理不和。 有一次,同事的工作上出現是一個很低級的錯誤,被經理抓住了。經理在會議上點名批評...
    顧塵埃閱讀 123評論 0 5
  • # 一個簡單直觀的iOS 圖表庫。
    這是健閱讀 364評論 0 0
  • 很多80后在為明天奮斗著,有的人功成名就,有的人愁眉苦臉,90后的許多人有的已經身價上億,有的卻還在默默的上學,這...
    e小琪琪閱讀 748評論 0 0