java基础--继承、实现、依赖、关联、聚合、组合的联系与区别
继承
指的是一个类或者接口继承另一个类或者接口,而且可以增加自己的新功能。
实现
指的是一个class类实现interface接口。

依赖
简单说,就是一个类中的方法用到了另一个类,一般依赖关系在java中提现为局部变量、方法的形参,或者对静态方法的调用。是一种弱关系。例如人用笔写字,人与笔之间的关系就是依赖。

关联
关联是一种强关系,类与类或者类与接口之间的一种强依赖关系。一般以类的属性形式出现在关联类中,在java中关联关系一般使用成员变量来实现。

聚合
聚合是关联的一种特例,体现的是整体与部分的关系,即has-a的关系。
has-a 不是must has,例如飞机场和飞机,飞机场可以停有飞机,也可以没有停飞机,飞机可以停在飞机场,也可以飞在天上。
他们有各自的生命周期。

组合
组合也是关联的一种特例,他体现的是contains-a的关系,比聚合更强。
组合同样体现整体和部分的关系,但是整体和部分是不可分割的,他们有共同的生命周期。
例如,人有耳朵鼻子等,一旦人死了,耳朵鼻子也就死了。

对于继承和实现应该没有什么疑问,他们体现的是类与类、类与接口直接的一种纵向关系。其他四中体现的是类与类、类与接口之间的引用、横向关系,很难区分。代码上没什么太大区别,主要是语义上的区别。
几种关系强弱程度依次为:组合>聚合>关联>依赖。
聚合和组合
- 聚合和组合都是一种关联关系,只是具有不同的整体-部分的意义。
- 整体部分中,部分的生命周期不同。聚合关系中,整体不会拥有部分的生命周期,整体删除时,部分不会被删除,多个整体共享同一个部件。组合关系中,整体拥有部分的生命周期,整体删除时,部分一定会被删除。
而且,多个整体不可以同时共享同一个部分。(区分某个关联关系是组合还是聚合,看两个类的生命周期是否同步,同步就是组合关系,不同步就是聚合关系)
3.聚合是has-a 关系,组合是contains-a 关系。
举个简单的例子:
大家需要去公司上班,所以很多员工组成了公司,每个公司都有自己的员工,每个员工也有自己的公司。员工和公司就是聚合的关系。另外,每个员工都有手脚,人和手脚的关系就是组合,不可分割,拥有相同的生命周期。
聚合关系图:

组合关系图:

代码上看区别:
public class Company {
public List<Company> companyList;
public Company(List<Company> companyList) {
this.companyList = companyList;
}
}
public class Employee {
public Hand hand;
public Employee() {
this.hand = new Hand();
}
}
信息的封装性不同
在聚合关系中,调用者可以同时了解公司和员工类,因为他们都是独立的
而在组合关系中,调用者只认识员工,根本就不知道手的存在,因为手类被严密的封装在员工类中。
http://blog.csdn.net/qq_31655965/article/details/54645220
java基础--继承、实现、依赖、关联、聚合、组合的联系与区别的更多相关文章
- Python 面向对象--继承,实现,依赖,关联,聚合,组合
一. 继承 继承指的是子类继承父类除私有内容以外的其他所有内容, 并且子类具有增加自己新内容的能力. 举例说明: class Animal: print("吃是动物的本能") cl ...
- UML关系(泛化,实现,依赖,关联(聚合,组合))
http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 继承.实现.依赖. ...
- UML 类关系图(泛化,实现,依赖,关联(聚合,组合))
UML的构造快包含3种: (1) 事物(4种):结构事物,行为事物,分组事物,注释事物 (2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系 (3) 图(10种):用例图,类图,对象图,包图 ...
- UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中, ...
- UML类图及依赖,泛化,关联,聚合,组合,实现
UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中, ...
- UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现(转)
UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统 ...
- UML类关系:依赖,关联,聚合和组合
UML图示例:(可使用StartUML来画图,小巧^_^) http://www.blogjava.net/lukangping/archive/2010/08/01/327693.html 聚合:表 ...
- 《Java基础——继承》
Java基础--继承 一.类的继承: 规则: 1.一个子类只能有一个父类,但一个父类可以有多个子类,每个子类都可以作为父类使用. 2.若一个类没有声明父类,则默认其父类为Object. 3.父 ...
- [转载]Java中继承、装饰者模式和代理模式的区别
[转载]Java中继承.装饰者模式和代理模式的区别 这是我在学Java Web时穿插学习Java设计模式的笔记 我就不转载原文了,直接指路好了: 装饰者模式和继承的区别: https://blog.c ...
随机推荐
- 使用T4模板为EF框架添加数据库实体注释(转)
1. 下载文件GetSummery.ttinclude2. 把我们下载下来的文件解压,将解压出来的文件放入解决方案中3. 修改下app.config,添加一个连接字符串: <add name=& ...
- luogu P5371 [SNOI2019]纸牌
传送门 打麻将+1(雾 有顺子这种东西...注意到以某个位置为开头的顺子数量最多为2,那么有个想法就是枚举以每个位置为开头的顺子个数,然后每个位置的刻子的取法个数为\(\lceil\frac{\tex ...
- ubuntu中apache的ssl证书配置及url重写
一.https原理 借用网上的图(图片来源: https://www.cnblogs.com/xiohao/p/9054355.html ),用到了对称加密和非对称加密. 二.ubuntu的ap ...
- Android判断是debug还是release模式
1.当有些功能不希望在release模式实现时,但是debug模式又需要的时候,就可以对当前版本模式进行判断.如是debug模式则日志输出级别设置为Level.DEBUG,release模式设置为Le ...
- ubuntu部署Java、Python开发环境
要部署Java开发环境首先就要安装JDK. 一.安装JDK8 1. 下载 jdk-8u172-linux-x64.tar.gz 到 /usr/java8/ 目录下: 2. tar -zxvf jd ...
- redis windows相关操作笔记
设置远程访问 1.注释掉bind 127.0.0.1. 2.protected-mode属性从yes改为no. 启动redis服务:redis-server.exe redis.windows.con ...
- Python3零基础入门学习视频+源码+课件+习题-小甲鱼
目录 1. 介绍 2. 目录 3. 下载地址 1. 介绍 适用人群 完全零基础入门,不需要任何前置知识. 课程概述 本系列教程面向零基础的同学,是一个深入浅出,通俗易懂的Python3视频教程. 前半 ...
- 聚类算法博客 K-means算法
最近看到一个 blog 感觉超好.记录下.. http://blog.pluskid.org/?p=17
- 用C#实现DES加密解密封装
主要用到C#提供的以下三个类:MemoryStream 内存流DESCryptoServiceProvider 加密服务提供者类CryptoStream 讲数据流连接到加密转换的流 using Sys ...
- Okhttp拦截器统一异常处理并多次读取response.body().string()
参考:https://blog.csdn.net/a624806998/article/details/73863606 引言: 写这篇文章,因为在自己编写实现Http日志拦截器的时候,在拦截器中使用 ...

