我试图了解聚合和组成。
假设我有以下内容:


并且我想使用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(..........));
   }

}

10-06 13:05