is-a has-a
is-a( 是 "a" 小明是人類)表示的是屬於得關系。比如兔子屬於一種動物(繼承關系)。
has-a( 有 "a" 汽車有輪胎) 表示組合,包含關系。比如兔子包含有腿,頭等組件;就不能說兔子腿是屬於一種兔子(不能說是繼承關系)
7.1.2 "is a"關系和"has a"關系
假設有兩個類:Computer和Employee。明顯地,這兩個類之間不存在"is a"的關系,即Employee不是計算機,它們之間沒有繼承關系的必要。因此不可能產生代碼重用性。但這兩個類之間是"has a"關系,即是支持的關系。例如,Employee"has a"Computer。明顯地是一種支持關系。這種支持關系落實到代碼中,就是在Employee中創建Computer的對象,調用其方法,到達完成某種運算和操作的目的。
Employee和Manager 類存在的則是"is a"關系,即Manager是Employee。它們之間存在共性,或者共同的屬性。Manager是Employee的具體化;Employee是Manager的概括和抽象。概括性和抽象性的類,如Employee,在繼承中則定義為超類。具體或代表對象特性的類,如Manager,則定義為子類。如果這是一個用來計算雇員工資的程序,那么在超類Employee中,我們應當包括所有子類都應該具有的、與計算工資有關的數據,例如name、employeeID、jobTitle、seniority、baseSalary以及用來計算基本工資部分的方法,如baseSalary()等。在Manager這個子類中,我們不僅繼承Employee的所有數據和方法,還增加針對Manager的新的數據,如是否董事會成員boardMember、職務補貼merit等,因為除基本工資的計算之外,這些都影響到具有經理職務雇員的收入。
對兩個類之間"is a"或是"has a"關系的分析,有助於我們確定它們之間是否存在繼承關系,避免設計上的錯誤,因而達到提高代碼重用性的目的