这篇博客对类之间的关系进行了整理,在用UML进行类图设计时,对类之间的关系更加清晰明了.java
1、表示符号上的区别学习
![]()
2、具体区别与联系spa
继承(泛化)设计
指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并能够增长它本身的新功能的能力,继承是类与类或者接口与接口之间最多见的关系,可分单重继承,多重继承(java不支持);在Java中此类关系经过关键字extends明确标识。对象
实现继承
指的是一个class类实现interface接口(能够是多个)的功能;实现是类与接口之间最多见的关系;在Java中此类关系经过关键字implements明确标识接口
依赖生命周期
能够简单的理解,就是一个类A使用到了另外一个类B,而这种使用关系是具备偶然性的、临时性的、很是弱的,可是B类的变化会影响到A;好比某个老师要授课,则须要有这么一门课让他教授,此时老师与课之间的关系就是依赖;表如今代码层面,为类Course做为参数被类Professor在Teach方法中使用;博客
关联class
它体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,普通关联关系的两个类处于同一层次上,关联能够是单向(只有一个类知道另一个类的公共属性和操做)的也能够是双向(两个类都知道另外一个类的公共属性和操做)的;大多数关联应该是单向的,单向关系更容易创建和维护,有助于寻找可服用的类。
双向关联:
单向关联:
聚合
聚合是关联关系的一种特例,他体现的是总体与部分、拥有的关系,即has-a的关系,此时总体与部分之间是可分离的,他们能够具备各自的生命周期,部分能够属于多个总体对象,也能够为多个总体对象共享;好比书本与暑假、公司与员工的关系等;具体表现为,若是A由B聚合成,表现为A包含有B的全局对象,可是B对象能够不在A建立的时刻建立。
组合
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他一样体现总体与部分间的关系,但此时总体与部分是不可分的,总体的生命周期结束也就意味着部分的生命周期结束,也能够理解为若是A由B组成,表现为A包含有B的全局对象,而且B对象在A建立的时刻建立。好比你和你的大脑或一本书和它的书页。
综上所述,对于继承、实现这两种关系比较简单,他们体现的是一种类与类、或者类与接口间的纵向关系;其余的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,这几种关系都是语义级别的,因此从代码层面并不能彻底区分各类关系;从后几种关系所表现的强弱程度来看,依次为:组合>聚合>关联>依赖。在面向对象的设计过程当中,能采起强度较大的关系,决不能采起强度小的关系。
随着学习深刻,会加上代码实现!