組合和聚合是有很大區別的,這個區別不是在形式上,而是在本質上: 比如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(); } }