[英]What makes the difference between the two examples below?
是什么使組合與聚合不同,它們都被聲明為私有,是在組合示例中,我們在Person
構造函數中創建Address
類的對象,如果這就是如何使Person
對象控制/擁有Address
對象。
public class Person {
private String firstName;
private String lastName;
private Address address;
//Composition example
public Person() {
address = new Address();
}
public Address getAddress() {
return address;
}
}
員工班
public class Employee {
private String firstName;
private String lastName;
private int age;
//Aggregation Java example
private Address address;
public void setAddress(Address address) {
this.address = address;
}
public Address getAddress() {
return address;
}
}
好吧,讓我首先解釋聚合和組合之間的區別。
聚合: 1. 聚合關系中的子項可以獨立於父項而存在 2. 聚合可以讀作“HAS A”
示例:如果我們有一個 Wheel 類,那么 Wheel 和 Car 類之間的關系是一個聚合:“汽車有四個輪子”。 車輪可以脫離汽車的上下文而存在。
組合: 1. 組合關系中的子項不能獨立於父項而存在。 換句話說,如果子類不能托管到父類中,它就沒有存在的意義。 2. Composition 可以讀作IS PART OF
示例:如果我們有一個類 Human,則類 Heart 和 Human 之間的關系是組合。 你從未見過一顆心獨自懸空,不是嗎? 因此,需要組合。
在 Java 中,我們使用private final
表示 Composition 關系
class Human { private final Heart heart; }
雖然聚合只是:
class Wheel { ... }
class Car { private List<Wheel> wheels; }
現在讓我們說,我們想完全移除一個 Human 類的對象(考慮到他不是器官捐贈者), Composition 關系迫使我們銷毀與那個人相關的心臟實例。 在聚合中,情況並非如此,如果它們曾經屬於的汽車實例損壞,則其他汽車可以使用車輪。
我希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.