JAVA技術內幕_什麼是is-a和has-a關係

is_a       用於繼承     

has_a    是組合   一個類中包含了其他類

一般我們認爲繼承可以分爲兩種基本的形式:實現繼承和接口繼承。

實現繼承的主要目標是代碼重用:

我們發現類B和類C存在同樣的代碼,因此我們設計了一個類A,用於存放通用的代碼。

基於這種思路的繼承稱爲實現繼承。   
接口繼承不同,它是基於現實生活中的語義的,表現了IsA的關係:

我們認爲存款帳戶和結算帳戶都是帳戶的子類,這種繼承我們稱之爲接口繼承。

注意,有些文章中一個類實現一個接口的行爲定義爲接口繼承,這和這裏的接口繼承是不同的概念,爲了區分兩種概念,我們可以使用接口繼承的另一種稱呼-類型繼承。

繼承的關鍵就在於如何靈活的運用兩種繼承方式。   
這裏的接口的意思和Java或者C#中的interface有着不同。

在此的接口表示的是一個類中所有公有的方法的簽名。   
所以IsA關係是關於行爲的。

 

HasA關係,也稱爲對象組合。實際上,HasA關係有兩種。  
第一種,靜態HasA關係。這在UML中叫做組合(composition),比如“汽車has-a引擎”。    
此種關係很像聚集,除了‘部分’的生命週期由‘整體’控制。

這種控制可能是直接的或者傳遞的。即‘整體’可能對創建或者銷燬‘部分’具有直接的職責,或者它可能獲得已經創建的部分,稍後傳遞給其它的假定對其有職責的整體。      

第二種,動態HasA關係。這在UML中叫做聚合(aggregation),比如“飛機場has-a飛機”。

別忘了use-a 是依賴關係

發佈了16 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章