继承

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

实现

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

依赖

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

关联

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

聚合

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

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

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

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

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


聚合关系图:

组合关系图:

聚合关系的类里含有另一个类作为参数。
雁群类(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,如需转载请自行联系原作者

继承、实现、依赖、关联、聚合、组合的联系与区别相关推荐

  1. UML关系(泛化,实现,依赖,关联(聚合,组合))

    UML的构造快包含3种: (1) 事物(4种):结构事物,行为事物,分组事物,注释事物 (2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系 (3) 图(10种):用例图,类图,对象图,包图, ...

  2. 【UML关系(泛化、实现、依赖、关联(聚合,组合))】

    UML关系(泛化,实现,依赖,关联(聚合,组合))

  3. 转:UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

    转:UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 原文:https://www.cnblogs.com/firstcsharp/p/5327659.html 类与类图 1) 类(Clas ...

  4. java 正则表达式 组合_java基础:5.1 面向对象、类的关联 聚合 组合、正则表达式...

    上一个礼拜太忙了,今天开始恢复java的学习~ 目录 1.面向过程--面向对象的区别 传统的面向过程式编程是动作驱动的,数据和动作是分离的.面向对象编程的范式重点在于对象,动作和数据一起定义在对象中. ...

  5. UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

    类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什 ...

  6. java 泛化_(转)Java中的泛化,依赖,关联,聚合,合成

    本文参考 今天给一个很有思想网友解释 关联, 聚合,合成 的区别.结果把我自己给绕进去了.赶紧的 查漏补缺. 做个备份. 处于聚合关系的两个类生命周期不同步,则是聚合关系:处于组合关系的两个类的生命周 ...

  7. ULM图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

    在UML中,类使用包含类名.属性和操作且带有分隔线的长方形来表示,如定义一个Employee类,它包含属性name.age和email,以及操作modifyInfo() public class Em ...

  8. UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别

    zz from: http://dev.firnow.com/course/3_program/java/javajs/20090219/155939.html UML中几种类间关系:继承.实现.依赖 ...

  9. rails 两表关联查询_Rails中的单表继承与多态关联:找到适合您的方法

    rails 两表关联查询 by Haley Mnatzaganian 通过海利·姆纳扎卡尼安 Rails中的单表继承与多态关联:找到适合您的方法 (Single-table inheritance v ...

  10. maven的依赖和聚合

    maven的继承: maven工程之间,A工程继承B工程 B就是父工程 A就是子工程 本质上是A工程的pom.xml中的配置继承了B工程中的pom.xml的配置. 2.作用 在父工程中统一管理项目中的 ...

最新文章

  1. 2022-2028年中国二次供水产业发展动态及投资战略规划报告
  2. (转) Weblogic 12c 集群部署和session复制
  3. CentOS下用yum管理软件的好处
  4. 超有用的,从此vi变得友好了
  5. 逆向去除winrar广告
  6. 【spring boot】Controller @RequestMapping 数据绑定:接收 Date 类型参数时遇错,将 String 类型的参数转换成 Date 类型
  7. 80--查询分组关联属性
  8. Codeforces Round #143 (Div. 2) C
  9. debian vbox设置_在Debian 9 Stretch系统上安装VirtualBox的两种方法
  10. python-Python 函数
  11. 【【模板】严格次小生成树[BJWC2010]】
  12. 自己配置外接屏幕和驱动,最终通过hdmi连接
  13. 后端Java架构师图谱(架构师必经之路)
  14. php添加gd扩展,php安装gd扩展的方法
  15. 将war文件解压到指定目录
  16. Apache ShenYu网关初体验
  17. ue4 rootmotion动画、模型导入使用(注)
  18. 光盘怎么刻录服务器系统,如何刻录系统光盘?小编手把手教你电脑Windows刻录系统光盘的方法...
  19. Two Birds with One Stone: Series Saliency for Accurate and Interpretable Multivariate Time Series...
  20. 电脑网络wifi图标消失,图标变成灰色的解决办法之一

热门文章

  1. 10家最具创新性的机器学习公司
  2. 卡内基梅隆大学提出基于学习的动作捕捉模型,用自监督学习实现人类3D动作追踪
  3. Go在招聘中最吃香、安全工程师薪资涨幅最高 | Hired年度软件工程师报告出炉
  4. Chrome 94 加入网页开发新技术,或有助于提高云游戏体验
  5. 腾讯获赔 475 万!首例“微信自动抢红包”不正当竞争案宣判
  6. 年后跳槽季,如何在编程面试中大获成功?
  7. 从互联网大厂裸辞 500 天后,我发生哪些变化?
  8. Ubuntu 16.04 amd64 bond mode6 配置
  9. Uva - 12050 Palindrome Numbers【数论】
  10. 设计模式(9)-责任链模式详解(易懂)