在Java与其他面向对象设计语言中,类之间常见的关系有6种

 分别是:  依赖、关联、聚合、组合、继承、实现,他们的耦合度依次增强。 其中,关联、聚合、组合关系仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情境环境等,他们在编程语言中的体现却是基本相同的

耦合度  No.1 组合  >  No2. 聚合 > No3.关联 > No4.依赖

* 依赖(Dependence),即“uses-a”关系,是一种最明显的、最常见的关系。依赖关系表示一个类依赖于另一个类的定义,一个类的方法操纵另一个类的对象。

一般而言,依赖关系在JAVA中体现为局域变量、方法的形参,或者对静态方法的调用。

例如,一个人(Driver)可以开车(Car),Driver类依赖于Car类的定义,因为Driver类引用了Car。与关联不同的是,Driver类里并没有Car类型的属性,Car的实例是以参量的方式传入到Driver类的方法中去的。

 class Car {
public static void run(){
System.out.println("汽车在奔跑");
}
} class Driver {
//使用形参方式发生依赖关系
public void drive1(Car car){
car.run();
}
//使用局部变量发生依赖关系
public void drive2(){
Car car = new Car();
car.run();
}
//使用静态变量发生依赖关系
public void drive3(){
Car.run();
}
}

关联(Association),是类与类之间的联接。它使一个类知道另一个类的属性和方法。

对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。

关联可以是双向的,也可以是单向的。在JAVA中,关联关系一般使用成员变量来实现。

在JAVA中,单向关联表现为:类A当中使用了类B,其中类B是作为类A的成员变量。

      双向关联表现为:类A当中使用了类B作为成员变量;同时类B中也使用了类A作为成员变量。

 class Student {
public static void study(){
System.out.println("学生正在学习");
}
} class Class {
//使用成员变量形式实现关联
Student student;
public void drive(){
student.study();
}
}

* 聚合(Aggregation),即“has-a”关系,是关联关系的一种,是强的关联关系。

聚合是整体和个体之间的关系,意味着类A的对象包含类B的对象。整体和个体是可以分离的,他们具有各自的生命周期,个体可以属于多个对象,也可以被多个对象共享。

关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的。在JAVA中,聚合关系一般使用成员变量来实现,聚合和关联关系两者的代码表现是相同的,仅仅是在语义上有所区别。

  

class Student{
Computer pc;
Phone phone;
//聚合关系中作为成员变量的类一般使用set方法赋值
public void setComputer(Computer pc){
This.pc = pc;
}
public void setPhone(Phone phone){
This.phone = phone;
} public void playcomputergame(){
System.out.println(“正在玩的游戏名字是:”+pc.getGameName());
}
public void playPhone(){
System.out.println(“正在用的手机型号是:”+phone.getPhoneName());
}
}

* 组合(Composition) ,即“contain-a”关系,也是关联关系的一种,是比聚合关系耦合度更强的关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死的;并且“部分”单独存在时没有任何意义。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样。 在JAVA中,组合关系一般使用成员变量来实现,组合关系中的成员变量一般会在构造方法中赋值

例如,People与Soul、Body之间是组合关系,当人的生命周期开始时,必须同时有灵魂和肉体;当人的生命周期结束时,灵魂肉体随之消亡;无论是灵魂还是肉体,都不能单独存在,他们必须作为人的组成部分存在。

 class People{
Soul soul;
Body body;
//组合关系中的成员变量一般会在构造方法中赋值
Public People(Soul soul, Body body){
This.soul = soul;
This.body = body;
} Public void study(){
System.out.println(“学习要用灵魂”+soul.getName());
}
Public void eat(){
System.out.println(“吃饭用身体:”+body.getName());
}
}

* 继承(Inheritance),即“is-a”关系,是一种用于表示特殊与一般关系的。表示类与类(或者接口与接口)之间的父子关系。一般而言,如果类A扩展类B,类A不但包含从类B继承的方法,还会拥有一些额外的功能。在JAVA中,用关键字extends表示继承关系

* 实现(Implementation),表示一个类实现一个或多个接口的方法。接口定义好操作的集合,由实现类去完成接口的具体操作。在java中使用implements表示

Java基础 【类之间的关系】的更多相关文章

  1. 【47】java的类之间的关系:泛化、依赖、关联、实现、聚合、组合

    java的类之间的关系:泛化.依赖.关联.实现.聚合.组合 泛化: • 泛化关系(Generalization)也就是继承关系,也称为"is-a-kind-of"关系,泛化关系用于 ...

  2. 【设计模式】UML类图及Java的类之间的关系

    UML类图展示 设计模式中的对象关系 关联和依赖的对比 依赖关系 虚线箭头 依赖是a类成员方法中有b类的属性,动物新陈代谢方法中有水和空气的属性,只有调这个方法的时候,才可能临时用一下 关联关系 实线 ...

  3. Java 中类与类之间的关系

    在java中类和类之间的关系基本上有依赖.关联.聚合.组合等 一.继承关系     继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在J ...

  4. java 类与类之间的关系 及uml图

    类与接口之间的关系 : 继承 类与类之间的关系 :继承关系  包含关系 类与对象之间的关系 : 实例 UML 类图中类与类之间的关系: 泛化关系(generalization) 关联关系(associ ...

  5. 全面解释java中StringBuilder、StringBuffer、String类之间的关系

    StringBuilder.StringBuffer.String类之间的关系 java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,在上一篇博文中我 ...

  6. Java——类之间的关系

    3.7 类之间的关系 3.7.1 泛化关系 类和类之间的继承关系及接口与接口之间的继承关系. 3.7.2 实现关系 类对接口的实现. 3.7.3 关联关系 类与类之间的连接,一个类可以知道另一个类的属 ...

  7. python基础学习笔记——类空间问题以及类之间的关系

    一. 类的空间问题 1.1 何处可以添加对象属性 class A: def __init__(self,name): self.name = name def func(self,sex): self ...

  8. Java中接口与接口和类之间的关系

    接口和接口之间的关系 继承关系 可以多继承,并且可以多层继承 注意: 1.如果多个父接口中有同名的抽象方法,那么子接口只需要实现一次即可 2.如果多个父接口中有同名的默认方法,那么子接口必须重写默认方 ...

  9. Day18--Python--面向对象--类与类之间的关系

    1. 依赖关系 在方法中引入另一个类的对象 (最不紧密的一种关系) 依赖关系都是把另一个对象当做参数 class Elephant: def __init__(self, name): self.na ...

  10. UML类图及类与类之间的关系

    原文地址:http://www.uml.org.cn/oobject/201211231.asp 类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的 ...

随机推荐

  1. eclipse maven install没反应解决办法

    .打开eclipse的Window菜单-->java-->Installed JREs .点击用的jdk,edit,在Default VM arguments里面填入-Dmaven.mul ...

  2. QDialog 使用Demo

    [1].pro QT += core gui greaterThan(QT_MAJOR_VERSION, ): QT += widgets TARGET = TestDialog TEMPLATE = ...

  3. redis相关问题

    什么是Redis?Redis 是一个使用 C 语言写成的,开源的 key-value 数据库..和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表 ...

  4. php Allocator Jemalloc TCMalloc那个内存分配器比较好?

    php Allocator Jemalloc TCMalloc那个内存分配器比较好? php一键安装脚本可以选择是否安装内存优化 You have 3 options for your Memory ...

  5. How to diagnose vehicle fault code by BMW ICOM and ISTA-D software

    Today illustrate how to diagnose vehicle fault code by BMW diagnostic tool BMW ICOM and ISTA-D softw ...

  6. 大数据学习路线:Hadoop集群同步技术分享

    今天给大家带来的技术分享是——Hadoop集群同步. 一.同步方式 选择一个机器,作为时间服务器(这里选择hadoop01),所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间. ...

  7. linux 下面压缩、解压.rar文件

    一,解压问题 在网上下东西的时候,经常会遇到.rar后缀的文件,我用tar解压,解压不出,上网找啊找,一直没找到什么合适的工具来压缩和解压.rar后缀的文件,现在我找到了. 二,rar和unrar安装 ...

  8. Django框架----模板语法

    Django模板系统 官方文档 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 只需要记两种特殊符号: {{  }}和 {% %} 变量 ...

  9. ansible中常用模块详解

    ansible中常用的模块详解: file模块 ansible内置的可以查看模块用法的命令如下: [root@docker5 ~]# ansible-doc -s file - name: Sets ...

  10. Windows下用cmd命令实例讲解yii2.0 的控制台定时任务

    Yii中的资源是和Web页面相关的文件,可为CSS文件,JavaScript文件,图片或视频等,资源放在Web可访问的目录下,直接被Web服务器调用. 有时候有些功能需要做到计划任务中去,因此就需要y ...