Java 下面两个例子的区别是什么?

Java 下面两个例子的区别是什么?,java,oop,Java,Oop,是什么使合成不同于聚合它们都声明为私有,是在合成示例中,我们在Person的构造函数中创建一个Address类的对象,如果是这样,那么Person对象如何控制/拥有Address对象 public class Person { private String firstName; private String lastName; private Address address; //Composition example public Person()

是什么使合成不同于聚合它们都声明为私有,是在合成示例中,我们在
Person
的构造函数中创建一个
Address
类的对象,如果是这样,那么
Person
对象如何控制/拥有
Address
对象

public class Person {

    private String firstName;
    private String lastName;
    private Address address;

    //Composition example
    public Person() {
            address = new Address();
    }



    public Address getAddress() {
            return address;
    }


}
雇员阶级

public class Employee {

    private String firstName;
    private String lastName;
    private int age;

    //Aggregation Java example
    private Address address;


    public void setAddress(Address address) {
            this.address = address;
    }
    public Address getAddress() {
            return address;
    }

}

首先,让我解释聚合和组合之间的区别

聚合: 1.聚合关系中的子级可以独立于父级而存在 2.聚合可以理解为“具有”

示例:如果我们有一个类轮子,那么类轮子和汽车之间的关系是一个聚合:“一辆汽车有四个轮子”。车轮可以存在于汽车之外

组成: 1.组合关系中的子项不能独立于父项而存在。换句话说,如果不能将子类托管到父类中,那么子类就没有存在的意义。 2.作文可以理解为

例:如果我们有一个类人,类心和类人之间的关系就是构成。你从来没见过一颗心独自悬在外面,是吗?因此,需要进行组合


在Java中,我们使用
private final

class Human { private final Heart heart; }
而聚合只是:

class Wheel { ... }
class Car { private List<Wheel> wheels; }
类轮{…}
类别汽车{私人列表车轮;}
现在让我们假设,我们想完全移除一个人类类的对象(考虑到他不是器官捐赠者),成分关系迫使我们破坏与该人类相关的心脏实例。总的来说,情况并非如此,如果车轮曾经属于另一辆汽车的实例发生故障,则车轮可以被另一辆汽车使用


我希望这能有所帮助。

也许您最好理解组合和聚合之间的概念差异。例如,请参阅。@rafaelim我已经检查过了,但没有帮助。@rafaelim我只是不明白为什么我们将Person object=null,Address对象也将为null。我明白了。查看java类中组合和聚合之间差异的一种方法是查看对象是否是必需的。组合,根据定义,关联的对象需要共存。聚合另一方面,与类关联的对象不是必需的。谢谢,但我知道它背后的理论,我只是不知道它是如何工作的,正如我在上面的空示例中提到的。为什么心脏属性声明为final?是否使它->私有车轮仍将是聚合,至于@KaysKadhi,将heart属性设置为final会产生什么效果?出于设计目的,final会告诉类的用户该属性是对象的不可分离和不可更改的部分。这不是一种义务。@OussamaBenGhorbel好的,明白了。