我试图了解聚合和组成。
假设我有以下内容:
并且我想使用java来实现,下面的实现正确吗?
public class ClassC { private String z; }
public class ClassB {
private String y;
private ClassC classC;
//-----setter and getter for classC
}
public class ClassA {
private String x;
private List<ClassB> classBList;
public ClassA(final List<ClassB> classBList) {
this.classBList=classBList
}
}
另外,如何确保ClassB可以恰好具有1个ClassC?
并且ClassA可以有1个或多个ClassB?如箭头所示(如果我正确理解了这些符号)。
最佳答案
我认为可能令人困惑的是组合和聚合之间的区别,因为两者都是“具有”关系的示例。
但是,组合比聚合更强大,包含对象控制着部分对象的整个生命周期。
您可以像做final那样用final编写它,但效果并不理想:
public class ClassA {
private String x;
private final List<ClassB> classBList;
public ClassA(String x, List<ClassB> classBList) {
this.classBList=classBList;
this.x = x;
}
}
我认为这将使表述更加清晰:
public class ClassA{
private String x;
private final List<ClassB> classBList;
public ClassA(String x){
this.x = x;
classBList = new ArrayList<ClassB>(2);
classBList.add(new ClassB(..........));
classBList.add(new ClassB(..........));
}
}