类与类之间的关系 灰太狼 2022-05-20 22:16 311阅读 0赞 ### 类与类之间的关系有泛化(继承)、实现、关联、依赖、聚合、组合 ### -------------------- **泛化(继承)**:指的是一个类(称为子类、子接口)继承另外一个类(称为父类、父接口)的功能。在UML类图设计中,泛化(继承)使用一条带空心的三角箭头的实线表示,从子类指向父类,或者是从子接口指向父接口。 ![这里写图片描述][70] 示例代码: public class Father{ public Collection doSomething(HashMap map){ System.out.println("父类方法被执行"); return map.values(); } } class son extends Father{ //这里我们使用了方法重载,相同的方法名,不同的参数类型叫做方法重载 //在不同的类中也可以使用重载 //区分重写与重载 重写是指方法名和参数都相同,但是方法体不同,一般在使用时会在方法签添加@Overide 编译器复制检查代码规范 public Collection doSomething(Map map){ System.out.println("子类方法被执行"); return map.values(); } } **实现**:实现指的是一个类实线interface接口的功能。在UML设计中通过使用一条带空心三角箭头的虚线表示,从类指向实现的接口。 ![这里写图片描述][70 1] 示例代码: interface IBook{ public void name(); } class NovelBook implements IBook{ public void name(){ System.out.println("我是一本书"); } } **在UML类图中实现和继承可以联合记忆,两者区别一个是实线,一个是虚线。** **依赖:**类A使用到类B,但这中使用关系是具有偶然性、临时性的,属于若耦合。 在代码上体现在,类A中含有类B的局部变量,类图如下所示; ![这里写图片描述][70 2] **关联:**关联体现的是两个类之间语义级别的一种强依赖关系,属于强耦合。这种关系比依赖强、不存在依赖关系的偶然性、关联关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。关联可以是单向、双向的。体现在代码上是,类A中有类B中的成员变量。UML类图设计中,关联关系由关联类A指向被关联类B的带箭头的实线表示。 类图如下所示: ![这里写图片描述][70 3] 示例代码如下所示: class abstract class AbstractGun{ //抽象射击方法 public void shoot(); } class Rifle extends AbstractGun{ //设计射击方法实现 public void shoot(){ System.out.println("步枪射击"); } } class Soldier{ //定义士兵的枪支 private AbstractGun gun; public void setGun(AbstractGun _gun){ this.gun=_gun; } public void killEnemy(abstractGun gun){ System.out.println("士兵开始杀人"); gun.shoot(); } } class client{ public static void main(String [] args){ Soldier solder=new Soldier(); solder.setGun(new Rifle()); solder.killEnemy(); } } 类图如下: ![这里写图片描述][70 4] **Client与Soldier之间为依赖关系,在main方法中有如下内容** `Soldier solder=new Soldier();` **Soldier与AbstractGun之间为关联关系关系,Soldier中有AbstractGun的类变量**`private AbstractGun gun;` **Rifle与AbstractGun之间为继承关系。** *关联和依赖关系可以联合记忆,在UML类图中两者区别在与连线的划分,实质为两个类之间耦合性的强弱,耦合性强的为依赖关系,耦合性弱的为关联关系。* **聚合:**聚合是关联关系的一种特例,体现在整体与部分到的关系,即has-a的关系。此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。比如计算机与CPU、公司与员工的关系等。表现在代码上与关联关系是一致的。在UML类图中聚合关系以空心菱形加实线箭头表示。 ![这里写图片描述][70 5] **组合**:组合也是关联关系的一种特例,体现的是一种contains-a的关系,这种关系比耦合更强,也称为强聚合。它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体声明周期结束意味着部分生命周期结束。比如人和人的代码。表现在代码层面上与关联关系是一致的。在UML类图设计中,组合关系以实心菱形加实现箭头表示。 ![这里写图片描述][70 6] [70]: /images/20220521/4634b8abb544416b824690338b0063b1.png [70 1]: /images/20220521/1c6480a8627d4c4a85497a7153fc7583.png [70 2]: /images/20220521/56810086884e47b0b2c7e318196ad75e.png [70 3]: /images/20220521/97a72c6e642c42beb4ef8afd6adc6692.png [70 4]: /images/20220521/a55f9695614b46f8af012ffb43bc51cd.png [70 5]: /images/20220521/34cf5e40efea4652be822c34ecd7c4ab.png [70 6]: /images/20220521/a2219b69ecd74121afd3b730d0cb1cc0.png
还没有评论,来说两句吧...