is-a has-a的區別、及理解


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"關系的分析,有助於我們確定它們之間是否存在繼承關系,避免設計上的錯誤,因而達到提高代碼重用性的目的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM