Java代码中的聚合和组合

Nir*_*ani 2 java composition relationship aggregation

由于聚合和组合是相关的协会,或者我们可以说它给出了对象或其他任何东西之间关系的理解.

我发布了这个问题,因为我在采访中问了一个问题,即什么是组合和聚合.

所以根据我的理解,我给出了我的想法,如下所示.

http://www.coderanch.com/t/522414/java/java/Association-Aggregation-Composition

聚合,关联和组合

Java中的关联与聚合与组合

还访问了更多.

我的基本解释与聚合表示松散的关系有关,而作文表明与此有关的强关系和明确的解释.

但是采访者侮辱了我并且说这是理论概念,你说我想要完美的Java代码,在这些代码中它们如何区别,并告诉我是否会给你一个小的应用程序然后你如何识别这是聚合和这个是作文?

那么现在我想了解纯技术概念和Java代码,它们的区别在于它们是什么?它们是什么?

Nis*_*ant 8

考虑一个LinkedList类的简单示例.A LinkedList由...组成Nodes.这里的LinkedList类是拥有对象.当它被摧毁时,Nodes它所包含的所有物都被擦掉了.如果Node从列表中删除对象,则该LinkedList对象仍将存在.

实现组合使得对象包含另一个对象.

class LinkedList {

 Node head;
 int size; 
}
Run Code Online (Sandbox Code Playgroud)

这是作文.

另一个例子,考虑一个Circle具有Point用于定义其中心坐标的类的类.如果Circle删除它的中心将被删除.

class Circle {

    private float radius;
    private Point center;

    public Circle(Point center, float radius) {
        this.center = center;
        this.radius = radius;
    }

    public void setRadius(float radius) {
        this.radius = radius;
    }

    public void setCenter(Point center) {
        this.center = center;
    }

    public float getRadius() {
        return radius;
    }

    public Point getCenter() {
        return center;
    }

    class Point {
        private int x;
        private int y;

        public Point(int x, int y) {
            this.x = x;
            this.y = y;

        }

        public void setY(int y) {
            this.y = y;
        }

        public void setX(int x) {
            this.x = x;
        }

        public int getY() {
            return y;
        }

        public int getX() {
            return x;
        }
    }

    @Override
    public String toString() {

        return "Center: " + "(" + center.getX() + "," + center.getY() + ")" + "\nRadius: " + this.getRadius()
                + " centimeters";
    }

}
Run Code Online (Sandbox Code Playgroud)

来自java集合的组合示例api:HashMap有一个Entry类.如果HashMap删除对象,则会删除Entry地图中包含的所有对象.

聚合也是一种对象组合,但不如组合强.它定义了"HAS A"关系.如果A类具有B类的引用并且删除B不会影响A的存在则使用非常简单的单词,那么它就是聚合.你必须在某个时候使用它.

  • 在java代码中有什么具体的方法来区分它们吗?你的例子真的很好,但面试官真的让我失望。当你给我链接时,我已经读过它,我也给出了与汽车相关的相同例子,但他说我“这是理论概念,这种类型的讨论永远不会结束! !我只是想知道你将如何实现组合和聚合?以及它们在实现上有何不同?”。我不知道面试官需要什么?还有什么与此相关的吗? (2认同)