SCJP認證 第二章 面向對象 2.2.2 HAS-A關係

HAS-A關係基於用法而不是繼承。換句話說,如果類A中的代碼具有對壘B實例的引用,則"類A HAS-A 類B"。例如,可以說:

   A Horse IS-A Animal(馬“是”一種動物) 。

   A Horse HAS-A Halter(馬“有”繮繩) 。

其代碼形式如下:

  在前面的代碼中,Horse類具有一個Halter類型的實例變量,因此可以認爲“Horse HAS-A Halter” 。換句話說,Horse有一個對Halter的引用。Horse代碼能夠使用這個Halter引用調用Halter上的方法,並得到Halter操作,而Horse類本身不必有與Halter相關的代碼(方法)。下圖說明了Horse和Halter之間的HAS-A關係。

  HAS-A關係使你能夠按照良好的OO實踐射擊類,而不必使用單獨的類來完成大量的不同操作。類(以及從這些類示例化的對象) 應該是專用的。正如我們的朋友Andrew所言:“專用類實際上有助於減少錯誤。”類的專用化程度越高,在其他應用程序中就越可能複用這個類。

  如果將與Halter相關的所有代碼都直接放入Horse類中,則最終會導致在Cow類、UnpaidIntern類以及所有其他可能需要Halter行爲的類中都會有重複的代碼。將Halter代碼保持在一個單獨的、專用的Halter類中,就有機會在多個應用程序中複用Halter類。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章