Java合成和聚合在同一个类中?
假设我们有两个类,命名为点和线。Line类有两个构造函数。这是Point类的代码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.
// 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
因此,是的,一个类可以与它持有引用的对象同时具有组合关系和聚合关系,但可能与您展示的示例不同。因为组合(相对于聚合)的定义特征是具有独占/不可共享的部分(请参阅),
点
-线
部分-整体关系的示例显然是一个聚合(无论您是将点对象传递给构造函数还是在构造函数中创建它们),因为定义线的两个点可以与其他线共享。可能的重复