Java具有关系、组合或聚合

Java具有关系、组合或聚合,java,associations,Java,Associations,我在谷歌上搜索,我比以前更困惑了。 构图和否定都有关系吗? 或者它只是聚合,所以合成就像“部分”? 或者我们只说Object“has-a”另一个Object,意思是关系可以是组合或聚合。 你能解释聚合和合成之间的区别吗 此代码 public class Tree{ private Leaf leaf = new Leaf(); } 不同于 public class Tree{ private Leaf leaf; public Tree(Leaf leaf){

我在谷歌上搜索,我比以前更困惑了。 构图和否定都有关系吗? 或者它只是聚合,所以合成就像“部分”? 或者我们只说Object“has-a”另一个Object,意思是关系可以是组合或聚合。 你能解释聚合和合成之间的区别吗

此代码

public class Tree{
     private Leaf leaf =  new Leaf();
}
不同于

public class Tree{
    private Leaf leaf;
    public Tree(Leaf leaf){
       this.leaf = leaf;
    }
}
所以,我确信第一个是合成,因为只有树被创建了,叶才存在。但是对于第二个例子,树可能有一个来自“外部”列表的叶引用,如果我删除(第二个例子)树,叶仍然存在

因此,我们可以说:

  • 合成是:当容器(树)对象被“删除”时,包含的(叶)也被“删除”
  • 聚合是:当容器(第二棵树)对象被“删除”时,包含的(叶)不会被“删除”

这是对的吗?

首先,有一件事是清楚的 组合和聚合都属于关联的范畴。意味着组合和聚合都是两种类型的关联

当存在弱关联时,此聚合,或者当不存在部分-整体关系时,意味着子级可以独立于父级而存在。关联的例子是员工和银行。一个人可以是任何一家银行的员工,也可以更换银行。或者银行可以在没有员工的情况下生存


当存在强关联时,这就是组合,或者当存在部分-整体关系时,意味着没有父项,子项就不能存在。构成的例子是人和人的心。心离不开人,人离不开心。“有一个”关键字只存在于构图中,因为构图中一个包含另一个的对象。

关系是构图还是聚合取决于环境。谢谢你完美的回答,我得到了一切,但我现在还有一个疑问,人类有心脏,但动物也有心脏。关联是类或对象之间的关系?我能在动物和人类身上都用心脏来形容它是合成物吗?Tysma在您工作的任何模式下都会有所收获。心没有独立的存在。它总是包含在人类、动物等体内,所以你不能制作心脏的对象,而只是在构造器中将其传递给人类或动物。听力对象必须在人类或动物类中制作。当你们在建立类之间的关系时,不要感到困惑,只要想想部分和整体的关系就可以了