博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
继承、实现、依赖、关联、聚合、组合的联系与区别
阅读量:6569 次
发布时间:2019-06-24

本文共 2078 字,大约阅读时间需要 6 分钟。

继承

指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;

422101-20160928074329344-1140195322.png

实现

指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;

422101-20160928074410531-1863856350.png

依赖

可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;

422101-20160928074646719-2042921908.png

关联

他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;

422101-20160928074707703-1561044397.png

聚合

聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

422101-20160928074739125-1256516479.png

组合 (a拥有b,a没了b也就没了,实心)

组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

422101-20160928074757360-1817412823.png

对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;

但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖


聚合关系图:

422101-20160928075228797-728402269.png

组合关系图:

422101-20160928075242578-595625531.png

聚合关系的类里含有另一个类作为参数。

雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数把值传进来 大雁类(Goose)可以脱离雁群类而独立存在 。
组合关系的类里含有另一个类的实例化 。
大雁类(Goose)在实例化之前 一定要先实例化翅膀类(Wings) 两个类紧密耦合在一起 它们有相同的生命周期 翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在 。
信息的封装性不同 。
在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的 。
而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。


聚合与组合

(1)聚合与组合都是一种结合关系,只是额外具有整体-部分的意涵。

(2)部件的生命周期不同

聚合关系中,整件不会拥有部件的生命周期,所以整件删除时,部件不会被删除。再者,多个整件可以共享同一个部件。

组合关系中,整件拥有部件的生命周期,所以整件删除时,部件一定会跟着删除。而且,多个整件不可以同时间共享同一个部件。

(3)聚合关系是“has-a”关系,组合关系是“contains-a”关系。

关联和聚合

(1)表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

(2)关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的。

(3)关联是一种结构化的关系,指一种对象和另一种对象有联系。

(4)关联和聚合是视问题域而定的,例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。但是在卖轮胎的店铺业务里,就算轮胎离开了汽车,它也是有意义的,这就可以用聚合了。

关联和依赖

(1)关联关系中,体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。

(2)依赖关系中,可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A。

综合比较

这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:

组合>聚合>关联>依赖;

本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5915023.html,如需转载请自行联系原作者

你可能感兴趣的文章
rz sz 用法
查看>>
回顾2017,展望2018
查看>>
使用jQuery来改善源代码浏览体验
查看>>
Hadoop软件的安装
查看>>
如何从一个小白入行到互联网成为一名高手?
查看>>
美好的一天(Weather Live)
查看>>
maven的test使用main的resources
查看>>
各类免费API接口分享
查看>>
聊聊springboot jest autoconfigure
查看>>
【微服务】之一:第一个SpringBoot项目
查看>>
关于python中对象与引用
查看>>
转:一个IT农民工分享互联网巨头公司面试流程
查看>>
String、Stringbuffer和Stringbuilder三姐妹的故事
查看>>
ping 测试网络上正在活动的主机 sh脚本
查看>>
DNS and BIND(2)
查看>>
windows下实现mysql数据库定时备份功能
查看>>
Web前端面试指导(八):iframe有那些缺点
查看>>
dovecot启用sieve自定义规则过滤邮件
查看>>
ip、子网掩码、网络数、主机数概念
查看>>
中国特色管理类软件项目开发之通用权限必杀技 -- 权限自由配置设定、实现智能化自动检测校验...
查看>>