Java 是关联还是聚合?

Java 是关联还是聚合?,java,oop,Java,Oop,我试图通过以下简单示例来理解面向对象方法: 我有一门课: public class TotalRestiction{ private Restriction r; public add(RestictionItem i){ //updating the Restriction field //depends on the RestrictionItem } private static class Restriction{

我试图通过以下简单示例来理解面向对象方法:

我有一门课:

public class TotalRestiction{

    private Restriction r;

    public add(RestictionItem i){
        //updating the Restriction field
        //depends on the RestrictionItem
    }

    private static class Restriction{
        //...
    }

    public Collection<Object> getObjects(){
        //...
    }
}

public interface RestrictionItem{

    //...
}
公共类totalRestriction{
私人限制;
公共添加(RestitutionItem i){
//更新限制字段
//取决于限制项
}
私有静态类限制{
//...
}
公共集合getObjects(){
//...
}
}
公共接口限制项{
//...
}
我不清楚这些类之间的确切关系。是聚合还是关联?我倾向于说它是聚合,因为
TotalRestriction
聚合了
RestrictionItem
s,封装在
Restriction
静态嵌套类中。但我对此不太确定。

将在它使用另一个类时使用,该类不必封装。当您的类与这些类具有has-a关系时,例如TotalRestriction has-a RestrictionItems。与类也有一个has-a关系,但其他类也独立于父类而存在,这与Composition不同


在您的情况下,我认为Restriction类与RestrictionItem具有聚合关系,TotalRestriction与Restriction具有组合关系。

如果您将类TotalRestriction实例化为:

TotalRestriction tr=new TotalRestriction(new Restriction());
及 在TotalRestriction类中,构造函数如下所示:

   class TotalRestriction{
      Restriction r;
      public TotalRestriction(Restriction r){
         this.r=r;
      }
   }
然后是聚合

如果您是这样使用的:

class TotalRestriction{
      Restriction r;
      public TotalRestriction(){
         r=new Restriction();
      }
   }

然后是关联,因为类TotalRestriction使用类限制服务。

我要说的是在类聚合中内部关联。一种(黑)盒递归。为了有一个数据库方案,可能只有聚合。@JoopEggen听起来这不是一件好事。。。它闻起来像一个糟糕的设计吗?不,完全不是。事实上,隐藏诸如缓存类之类的东西,以及许多具有内部功能的其他抽象,这只是一种嵌入的方式,它具有可以重用的良好功能。它更像一颗美丽的宝石;所以我提到了盒子里的盒子。限制和限制项目之间的关系是什么?如果RestrictionItem是公共接口,它如何引用私有类限制?(你是说它封装了它)@eis它没有。我只使用它来创建重新定向。RestrictionItems正在为它构建Vlock。您没有以任何方式考虑RestrictionItem。OP问“类之间”的关系是什么,我想这意味着所有列出的类。。。此外,您给出的第一个示例甚至不可能,因为限制是私有类。