一、定义上区别:
聚合与组合都是表示整体和个体的关联关系,他们之间最大的区别在于子类被父类控制的程度。组合的父子类关系比聚合要强
聚合:has-a关系,父类包含子类,子类可以独立于父类存在
聚合关系用下图符号表示:表示B由A聚合而成
组合:part-of关系,父类拥有子类,子类不能独立于父类存在
组合关系用下图符号表示:表示B由A组合而成
(不过,一个关联关系是聚合还是组合,需要根据实际的业务需求来断定。为什么这么说,因为可能相同超类和子类,在不同的业务场景,关联关系会发生变化。)
举例说明: 有三个类Name,Student,Address,反应的是学生与姓名和地址之间的关系,若类的使用方法如下,则代表Name和Address与Student之间是一个聚合关系.因为此时Name和Address类在Student类中出现都是以一种地址的形式,这两种对并没有在Student类中开辟新的空间,而是将已有的对象地址传给了Student类的属性。那么当外面的name和address对象的属性值发生改变的时候,那么Student类中的属性值会自动的发生改变。
public class Name{ public class Student { public class Address{
private Name name;
private Address address;
public Student(Name name,Address address){
this.name = name;
this.address = address;
}
} } }
若是Student类以下面的方式使用Name和Address类,那么他们之间就是一种组合的关系,因为我们可以在下面的代码中看到,在Student类中Name和Address开辟新的空间,有了自己独立的空间和属性值,此时传给Student类中属性的值不是一个地址,而是一个独立的对象,这个对象和外面name,address没有任何关系,出了属性值一样以外,外面对象值的改变不会对Student中name和address对象属性只有任何的影响。
、
public class Name{ public class Student { public class Address{
private Name name;
private Address address;
public Student(Name name,Address address){
this.name = new Name(name);
this.address = new Address(address);
}
} } }
二、代码验证
在我上传的文件中有聚合和组合的源代码文件。