java 类 关系_Java基础 【类之间的关系】

本文介绍了Java中类之间的六种关系:依赖、关联、聚合、组合、继承和实现,分别阐述了它们的概念、特点以及在代码中的体现。依赖是最常见的关系,表现为一个类使用另一个类。关联、聚合和组合是类与类的联接,其中组合的耦合度最强。继承和实现则体现了类的层次结构和接口的实现。

在Java与其他面向对象设计语言中,类之间常见的关系有6种

分别是:  依赖、关联、聚合、组合、继承、实现,他们的耦合度依次增强。 其中,关联、聚合、组合关系仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情境环境等,他们在编程语言中的体现却是基本相同的

耦合度  No.1 组合  >  No2. 聚合 > No3.关联 > No4.依赖

* 依赖(Dependence),即“uses-a”关系,是一种最明显的、最常见的关系。依赖关系表示一个类依赖于另一个类的定义,一个类的方法操纵另一个类的对象。

一般而言,依赖关系在JAVA中体现为局域变量、方法的形参,或者对静态方法的调用。

6ebae5173c04d5c5dfbae78bae4e19f6.png

例如,一个人(Driver)可以开车(Car),Driver类依赖于Car类的定义,因为Driver类引用了Car。与关联不同的是,Driver类里并没有Car类型的属性,Car的实例是以参量的方式传入到Driver类的方法中去的。

1 classCar {2 public static voidrun(){3 System.out.println("汽车在奔跑");4 }5 }6

7 classDriver {8 //使用形参方式发生依赖关系

9 public voiddrive1(Car car){10 car.run();11 }12 //使用局部变量发生依赖关系

13 public voiddrive2(){14 Car car = newCar();15 car.run();16 }17 //使用静态变量发生依赖关系

18 public voiddrive3(){19 Car.run();20 }21 }

关联(Association),是类与类之间的联接。它使一个类知道另一个类的属性和方法。

对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。

关联可以是双向的,也可以是单向的。在JAVA中,关联关系一般使用成员变量来实现。

在JAVA中,单向关联表现为:类A当中使用了类B,其中类B是作为类A的成员变量。

双向关联表现为:类A当中使用了类B作为成员变量;同时类B中也使用了类A作为成员变量。

95e5cc0b62c8f0ff83f792bfdc8a08e4.png

1 classStudent {2 public static voidstudy(){3 System.out.println("学生正在学习");4 }5 }6

7 classClass {8 //使用成员变量形式实现关联

9 Student student;10 public voiddrive(){11 student.study();12 }13 }14

15

* 聚合(Aggregation),即“has-a”关系,是关联关系的一种,是强的关联关系。

聚合是整体和个体之间的关系,意味着类A的对象包含类B的对象。整体和个体是可以分离的,他们具有各自的生命周期,个体可以属于多个对象,也可以被多个对象共享。

关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的。在JAVA中,聚合关系一般使用成员变量来实现,聚合和关联关系两者的代码表现是相同的,仅仅是在语义上有所区别。

902ecc4fc55ab64f37bc320c572def0f.png

classStudent{

Computer pc;

Phone phone;//聚合关系中作为成员变量的类一般使用set方法赋值

public voidsetComputer(Computer pc){

This.pc=pc;

}public voidsetPhone(Phone phone){

This.phone=phone;

}public voidplaycomputergame(){

System.out.println(“正在玩的游戏名字是:”+pc.getGameName());

}public voidplayPhone(){

System.out.println(“正在用的手机型号是:”+phone.getPhoneName());

}

}

* 组合(Composition) ,即“contain-a”关系,也是关联关系的一种,是比聚合关系耦合度更强的关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死的;并且“部分”单独存在时没有任何意义。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样。 在JAVA中,组合关系一般使用成员变量来实现,组合关系中的成员变量一般会在构造方法中赋值

9c3f9780dbb826d7922c217a801cbcf4.png

例如,People与Soul、Body之间是组合关系,当人的生命周期开始时,必须同时有灵魂和肉体;当人的生命周期结束时,灵魂肉体随之消亡;无论是灵魂还是肉体,都不能单独存在,他们必须作为人的组成部分存在。

1 classPeople{2 Soul soul;3 Body body;4 //组合关系中的成员变量一般会在构造方法中赋值

5 Public People(Soul soul, Body body){6 This.soul =soul;7 This.body =body;8 }9

10 Public voidstudy(){11 System.out.println(“学习要用灵魂”+soul.getName());12 }13 Public voideat(){14 System.out.println(“吃饭用身体:”+body.getName());15 }16 }

* 继承(Inheritance),即“is-a”关系,是一种用于表示特殊与一般关系的。表示类与类(或者接口与接口)之间的父子关系。一般而言,如果类A扩展类B,类A不但包含从类B继承的方法,还会拥有一些额外的功能。在JAVA中,用关键字extends表示继承关系

7c3053d6e3b4d3562b29928a877b832d.png

* 实现(Implementation),表示一个类实现一个或多个接口的方法。接口定义好操作的集合,由实现类去完成接口的具体操作。在java中使用implements表示

b10953f2554d207933cee8a10fa52d18.png

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值