本文目錄一覽:
java中通過組合獲得的方法能重寫嗎?
不可以的。
java中的組合就是在一個類中直接引用另一個類,然後調用引用類的一些方法來完成一些功能,適合領域模型中has-a關係的實現;而繼承則適合領域模型中is-a關係的實現。
JAVA中繼承與組合的區別是什麼
1)組合(has-a)關係可以顯式地獲得被包含類(繼承中稱為父類)的對象,而繼承(is-a)則是隱式地獲得父類的對象,被包含類和父類對應,而組合外部類和子類對應。
2)組合關係在運行期決定,而繼承關係在編譯期就已經決定了。
3)組合是在組合類和被包含類之間的一種松耦合關係,而繼承則是父類和子類之間的一種緊耦合關係。
4)當選擇使用組合關係時,在組合類中包含了外部類的對象,組合類可以調用外部類必須的方法,而使用繼承關係時,父類的所有方法和變數都被子類無條件繼承,子類不能選擇。
5)最重要的一點,使用繼承關係時,可以實現類型的回溯,即用父類變數引用子類對象,這樣便可以實現多態,而組合沒有這個特性。
6)還有一點需要注意,如果你確定復用另外一個類的方法永遠不需要改變時,應該使用組合,因為組合只是簡單地復用被包含類的介面,而繼承除了復用父類的介面外,它甚至還可以覆蓋這些介面,修改父類介面的默認實現,這個特性是組合所不具有的。
7)從邏輯上看,組合最主要地體現的是一種整體和部分的思想,例如在電腦類是由內存類,CPU類,硬碟類等等組成的,而繼承則體現的是一種可以回溯的父子關係,子類也是父類的一個對象。
8)這兩者的區別主要體現在類的抽象階段,在分析類之間的關係時就應該確定是採用組合還是採用繼承。
9)引用網友的一句很經典的話應該更能讓大家分清繼承和組合的區別:組合可以被說成「我請了個老頭在我家裡幹活」 ,繼承則是「我父親在家裡幫我幹活”。
java中什麼叫組合
組合就是 A類的對象是B類的成員變數。相當於 A類是B類對象的一個屬性!
組合和繼承都很常見的!
JAVA中的聚集和組合的區別與聯繫
聚合(Aggregation) 關係是關聯關係的一種,是強的關聯關係。聚合是整體和個體之間的關係。例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關係便整體和個體的關係。與關聯關係一樣,聚合關係也是通過實例變數實現的。但是關聯關係所涉及的兩個類是處在同一層次上的,而在聚合關係中,兩個類是處在不平等層次上的,一個代表整體,另一個代表部分
組合(Composition) 關係是關聯關係的一種,是比聚合關係強的關係。它要求普通的聚合關係中代表整體的對象負責代表部分對象的生命周期,組合關係是不能共享的。代表整體的對象需要負責保持部分對象和存活,在一些情況下將負責代表部分的對象湮滅掉。代表整體的對象可以將代表部分的對象傳遞給另一個對象,由後者負責此對象的生命周期。換言之,代表部分的對象在每一個時刻只能與一個對象發生組合關係,由後者排他地負責生命周期。部分和整體的生命周期一樣。
以上關係的耦合度依次增強(關於耦合度的概念將在以後具體討論,這裡可以暫時理解為當一個類發生變更時,對其他類造成的影響程度,影響越小則耦合度越弱,影響越大耦合度越強)。由定義我們已經知道,依賴關係實際上是一種比較弱的關聯,聚合是一種比較強的關聯,而組合則是一種更強的關聯,所以籠統的來區分的話,實際上這四種關係、都是關聯關係。
聚合關係是是一種比較強的關聯關係,java中一般使用成員變數形式實現。對象之間存在著整體與部分的關係。例如上例中
pre t=”code” l=”java”class Driver {
//使用成員變數形式實現聚合關係
Car mycar;
public void drive(){
mycar.run();
}
}假如給上面代碼賦予如下語義:車是一輛私家車,是司機財產的一部分。則相同的代碼即表示聚合關係了。聚合關係一般使用setter方法給成員變數賦值。
假如賦予如下語義:車是司機的必須有的財產,要想成為一個司機必須要先有輛車,車要是沒了,司機也不想活了。而且司機要是不幹司機了,這個車就砸了,別人誰也別想用。那就表示組合關係了。一般來說,為了表示組合關係,常常會使用構造方法來達到初始化的目的,例如上例中,加上一個以Car為參數的構造方法 pre t=”code” l=”java”public Driver(Car car){
mycar = car;
}所以,關聯、聚合、組合只能配合語義,結合上下文才能夠判斷出來,而只給出一段代碼讓我們判斷是關聯,聚合,還是組合關係,則是無法判斷的。/ol
java 聚合和組合的區別?
組合:部分與整體是與生俱來的,部分的存在依賴於整體。比如人與人的某個器官,人一出生,器官就在,人死亡,器官也就沒了意義。
聚合:你與你的電腦(或者其它物品),電腦是屬於你的吧,但是你是一出生就擁有了電腦嗎,電腦是某個廠商生產出來的,然後你買過來才成為了你的一部分。你死了以後,電腦也可以送給別人繼續用啊!這就不叫做其存亡了,所以這是聚合。
這個是結合我之前看過的設計模式所想到的,如果你了解過設計模式,則會更容易明白我說的是什麼了,比如有一種設計模式叫做責任鏈模式,責任鏈中的處理者往往是先創建出來,然後再把引用傳到另一個責任處理對象作為責任接班人,這就用到了聚合的思想吧。
另外,《thinking in Java》裡面是這樣說的,「composing a new class from existing classes, this concept is called composition (if the composition happens dynamically, it’s usually called aggregation)」。
意思是通過現在的類組合成一個新的類,叫做組合,如果這種組合是動態的,則叫聚合。如何理解」動態「,也就是可以隨時加進來也可以隨時刪除,拿上面的人與電腦的例子來說,電腦可以隨時扔掉,也可以隨時加進來,人的生命不會受到威脅,但是人如果少了某個器官,則會危及到生命了!其實現實中的例子與Java中的概念還是有一點出入,類比只能是接近真相。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/204308.html