人和人和手,腳是組合關係,因為當人死亡後人的手也就不復存在了。人和他的電腦是聚合關係。 class Hand{ } class Computer{ } 組合: class Person{ private Hand hand; public Person(){ hand = new Hand(); } } 聚合: class Person{ private Computer computer; public setComputer(){ computer = new Computer(); } }
組合和聚合是有很大區別的,這個區別不是在形式上,而是在本質上:
比如A類中包含B類的一個引用b,當A類的一個物件消亡時,b這個引用所指向的物件也同時消亡(沒有任何一個引用指向它,成了垃圾物件),這種情況叫做組合,反之b所指向的物件還會有另外的引用指向它,這種情況叫聚合。
在實際寫程式碼時組合方式一般會這樣寫:
A類的構造方法裡建立B類的物件,也就是說,當A類的一個物件產生時,B類的物件隨之產生,當A類的這個物件消亡時,它所包含的B類的物件也隨之消亡。
聚合方式則是這樣:
A類的物件在建立時不會立即建立B類的物件,而是等待一個外界的物件傳給它
傳給它的這個物件不是A類建立的。
現實生活中:
人和人和手,腳是組合關係,因為當人死亡後人的手也就不復存在了。人和他的電腦是聚合關係。 class Hand{ } class Computer{ } 組合: class Person{ private Hand hand; public Person(){ hand = new Hand(); } } 聚合: class Person{ private Computer computer; public setComputer(){ computer = new Computer(); } }