java聚合
① java怎么理解组合/聚合关系给个例子最好能将细点
聚合(Aggregation)关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。与关联关系一样,聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分。
组合(Composition)关系是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样。
classDriver{
//使用成员变量形式实现关联
Carmycar;
publicvoiddrive(){
mycar.run();
}
...
//使用方法参数形式实现关联
publicvoiddrive(Carcar){
car.run();
}
}
聚合关系是是一种比较强的关联关系,java中一般使用成员变量形式实现。对象之间存在着整体与部分的关系。例如上例中
classDriver{
//使用成员变量形式实现聚合关系
Carmycar;
publicvoiddrive(){
mycar.run();
}
}
假如给上面代码赋予如下语义:车是一辆私家车,是司机财产的一部分。则相同的代码即表示聚合关系了。聚合关系一般使用setter方法给成员变量赋值。
假如赋予如下语义:车是司机的必须有的财产,要想成为一个司机必须要先有辆车,车要是没了,司机也不想活了。而且司机要是不干司机了,这个车就砸了,别人谁也别想用。那就表示组合关系了。一般来说,为了表示组合关系,常常会使用构造方法来达到初始化的目的,例如上例中,加上一个以Car为参数的构造方法
publicDriver(Carcar){
mycar=car;
}
所以,关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的。
② java中类与类之间的关系
类与类之间最常见的关系主要有三种:依赖(uses-a)、聚合(has-a)和继承(is-a)。
下面以在线书店订单系统为例,来详细的讲述这三种关系的概念。
在线书店订单系统的主要功能是:注册用户可以登录到网上书店选购图书,在线填写订单,并支付购书款。书店确认已经收到购书款时,按用户留下的地址邮寄图书。可以在这个系统中建立几个类,有图书(book)、账户(account)、订单(order)、地址(address)等,如下图所示:
继承
继承就是一个类能调用另一个类的所有数据成员,并在当前类中不需要再重新定义,本章已经讲得很明白了。
③ java类之间关系中,一般的关联关系是怎样的
关联关系分为两种:聚合和组合。聚合:举个例子,学校类是整体,而学生类是部分。学校与学生都是可以独立存在的,之间没有什么必然的联系。因此学校与学生就是聚合关系。代码:
public class Student{
}
public class School{
private List<Student> students ; //学校与学生是聚合关系
}
组合:如Windows的窗口和窗口上的菜单就是组合关系。如果整体被销毁,部分也必须跟着一起被销毁,如果所有者被复制,部分也必须一起被复制。,代码:
public class Menu{
}
public class Window{
private List<Menu> menus ;
}