Java合成和聚合在同一个类中?

Java合成和聚合在同一个类中?,java,constructor,uml,aggregation,composition,Java,Constructor,Uml,Aggregation,Composition,假设我们有两个类,命名为点和线。Line类有两个构造函数。这是Point类的代码 // The Point class definition public class Point { // Private member variables private int x, y; // (x, y) co-ordinates // Constructors public Point(int x, int y) { this.x = x; this.

假设我们有两个类,命名为点和线。Line类有两个构造函数。这是Point类的代码

// The Point class definition
public class Point {
   // Private member variables
   private int x, y;   // (x, y) co-ordinates

   // Constructors
   public Point(int x, int y) {
      this.x = x;
      this.y = y;
   }
   public Point() {    // default (no-arg) constructor
      x = 0;
      y = 0;
   }
}    
这是Line类的代码

public class Line {
   // Private member variables
   Point begin, end;   // Declare begin and end as instances of Point

   // Constructors
   public Line(int x1, int y1, int x2, int y2) {
      begin = new Point(x1, y1);  
      end   = new Point(x2, y2);
   }`
   public Line(Point begin, Point end) {
      this.begin = begin;
      this.end   = end;
   }
}

正如您所看到的,Line类有两个构造函数。第一个构造函数是合成的示例,而第二个构造函数是聚合的示例。现在,关于这个案子我们能说些什么?类可以同时具有聚合和组合吗?感谢您的回答。

对于聚合和组合之间的区别,人们普遍接受的定义是终身责任和所有权

  • 聚合:对象
    A
    保存对其他对象的引用,但这些其他对象与其他类共享。当处置
    A
    时,其他对象继续存在并在应用程序中使用
  • 组合:一个对象
    B
    是由其他对象“构成”的。当一个对象被释放时,其他对象也被释放
它值得:

UML中很少有东西比聚合和组合更令人惊愕

聚合(白色菱形)没有超出常规关联的语义。正如吉姆·伦堡所说,这是一种模型安慰剂

构图(黑钻石)具有语义。最特别的是,一个对象只能是一个组合关系的一部分


因此,是的,一个类可以与它持有引用的对象同时具有组合关系和聚合关系,但可能与您展示的示例不同。

因为组合(相对于聚合)的定义特征是具有独占/不可共享的部分(请参阅),
-
线
部分-整体关系的示例显然是一个聚合(无论您是将点对象传递给构造函数还是在构造函数中创建它们),因为定义线的两个点可以与其他线共享。

可能的重复