在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强。
依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。定义比较晦涩难懂,但在java中的表现还是比较直观的:类a当中使用了类b,其中类b是作为类a的方法参数、方法中的局部变量、或者静态方法调用。类上面的图例中:people类依赖于book类和food类,book类和food类是作为类中方法的参数形式出现在people类中的。
代码样例:
|
1
2
3
4
5
6
|
public class people{
//book作为read方法的形参
public void read(book book){
system.out.println(“读的书是”+book.getname());
}
}
|
单向关联:
双向关联:
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。关联关系分为单向关联和双向关联。在java中,单向关联表现为:类a当中使用了类b,其中类b是作为类a的成员变量。双向关联表现为:类a当中使用了类b作为成员变量;同时类b中也使用了类a作为成员变量。
代码样例:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class son{
//关联关系中作为成员变量的类一般会在类中赋值
father father = new father();
public void getgift(){
system.out.println(“从”+father.getname()+”获得礼物”);
}
}
public class father{
son son = new son();
public void givegift(){
system.out.println(“送给”+son.getname()+“礼物”);
}
}
|
聚合关系是关联关系的一种,耦合度强于关联,他们的代码表现是相同的,仅仅是在语义上有所区别:关联关系的对象间是相互独立的,而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。
代码样例:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class people{
car car;
house house;
//聚合关系中作为成员变量的类一般使用set方法赋值
public void setcar(car car){
this.car = car;
}
public void sethouse(house house){
this.house = house;
}
public void driver(){
system.out.println(“车的型号:”+car.gettype());
}
public void sleep(){
system.out.println(“我在房子里睡觉:”+house.getaddress());
}
}
|
相比于聚合,组合是一种耦合度更强的关联关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死的;并且“部分”单独存在时没有任何意义。在下图的例子中,people与soul、body之间是组合关系,当人的生命周期开始时,必须同时有灵魂和肉体;当人的生命周期结束时,灵魂肉体随之消亡;无论是灵魂还是肉体,都不能单独存在,他们必须作为人的组成部分存在。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class people{
soul soul;
body body;
//组合关系中的成员变量一般会在构造方法中赋值
public people(soul soul, body body){
this.soul = soul;
this.body = body;
}
public void study(){
system.out.println(“学习要用灵魂”+soul.getname());
}
public void eat(){
system.out.println(“吃饭用身体:”+body.getname());
}
}
|
继承表示类与类(或者接口与接口)之间的父子关系。在java中,用关键字extends表示继承关系。uml图例中,继承关系用实线+空心箭头表示,箭头指向父类。
表示一个类实现一个或多个接口的方法。接口定义好操作的集合,由实现类去完成接口的具体操作。在java中使用implements表示。uml图例中,实现关系用虚线+空心箭头表示,箭头指向接口。
在java中继承使用extends关键字,实现使用implements关键字,很直观。就不代码演示了。
相关文章
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
- 64M VPS建站:能否支持高流量网站运行? 2025-06-10
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 64M VPS建站:怎样优化以提高网站加载速度? 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-06-04 83
-
2025-05-29 62
-
2025-05-25 37
-
2025-05-29 12
-
2025-05-27 40
















