java类的几种关系详解(有代码、有类图)

java类的几种关系详解(有代码、有类图)

前言

知道类的几种关系也是编程的基础知识,通常我们在软件设计、架构设计、开发中都需要使用的,

类的关系

一般情况下类的关系分为6种,分别是实现、继承、依赖、关联、聚合、组合,下面将这6中关系简单的分类

(1)is a –>继承、实现

(2)has a–>关联、组合、聚合

(3)use a–>依赖

1、继承(extends):继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议性。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口。 

例如,蛇是父类,眼镜蛇继承蛇,下面看uml图和代码

java类的几种关系详解(有代码、有类图)

 代码:

class Snake{
	void sleep(){}
}
class GlassSnake extends Snake{}

2、实现(implements):实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性。在UML类图设计中,实现用一条带空心三角箭头的虚线表示,从类指向实现的接口。 

例如,UserService是接口、UserServiceImpl是接口的具体实现(javaweb开发中长使用)

java类的几种关系详解(有代码、有类图)

代码:

interface UserService{
	void addUser();
}
class UserServiceImpl implements UserService{

	public void addUser() {
		// TODO Auto-generated method stub
		
	}
	
}

继承和实现比较简单,也没什么太大的争议,比较容易区分,下面的几种关系相对比较难区分,可能有争议,先给他们的关系的强弱做个简单的排序

依赖<关联<聚合<组合

3,依赖:简单的理解,依赖就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A。例如,人和电脑的关系,人没必要一定要有电脑,但是比如人在写代码的时候就需要用电脑,这是一种偶然性的,一般来说类B作为参数被类A在某个method方法中使用。在UML类图设计中,依赖关系用由类A指向类B的带箭头虚线表示。

java类的几种关系详解(有代码、有类图)

代码:

 class person{
	//写代码
	void writeCode(Computer c){
		System.out.println("用电脑写代码");
	}
}

class Computer{}

4、关联:关联体现的是两个类之间语义级别的一种强依赖关系,比如人和鞋子,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。关联可以是单向、双向的。表现在代码层面,为被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。在UML类图设计中,关联关系用由关联类A指向被关联类B的带箭头实线表示,在关联的两端可以标注关联双方的角色和多重性标记。 通俗的解释就是,我今天可以穿这个nike的鞋子,明天可能穿adidas的鞋子,后天还可能穿nb的鞋子

java类的几种关系详解(有代码、有类图)

代码:

class Person{
	private Shoes mShoes;

	public Shoes getmShoes() {
		return mShoes;
	}

	public void setmShoes(Shoes mShoes) {
		this.mShoes = mShoes;
	}
	
}
class Shoes{}

5、聚合:聚合是关联关系的一种特例,体现的是整体与部分的关系,即has-a的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。比如汽车和发动机,汽车生产出来就有发动机,但是这个发动机可以是自己公司生产的、也可以拿别人公司的发动机组装起来,聚合关系以空心菱形加实线箭头表示。聚合中 整件不会拥有部件的生命周期,所以整件删除时,部件不会被删除。再者,多个整件可以共享同一个部件。通俗的解释,就是大众的汽车在生产的时候可以使用宝马的发动机、奔驰的汽车生产的时候也能用宝马的发动机(当然宝马愿不愿意是另外一回事,哈哈)

聚合侧重的是在构造方法中传入聚合的对象

java类的几种关系详解(有代码、有类图)

代码:

class Engine{}
class Car{
	Engine mEngine;
	public Car(Engine engine) {
		// TODO Auto-generated constructor stub
		this.mEngine = engine;
	}
}

组合:最强的关系,又称为强聚合、这种关系就类似于人和大脑、手脚等的关系,组合关系中,整件拥有部件的生命周期,所以整件删除时,部件一定会跟着删除。而且,多个整件不可以同时间共享同一个部件。通俗来讲,就是一个人一出生她的心脏就已经明确的确定好了,并且当人老了去世了,她的心脏也就停止了(当然这个例子举得优点差强人意…反正就大概这个意思)

组合侧重,在构造函数中实例化组合的对象,通过new方法,或者间接通过new

java类的几种关系详解(有代码、有类图)

代码:

class Person{
	private Brain mBrain;
	public Person() {
		// TODO Auto-generated constructor stub
		mBrain = new Brain();
	}
}
class Brain{}

好了,类的关系就简单的讲到这里把,欢迎补充

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111242.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vuedevtools使用_怎么下载vue_devtools

    vuedevtools使用_怎么下载vue_devtoolsCSDN首页首页博客程序员学院下载论坛问答代码直播电子书最牛小程序:想要的资源都能搜到?会员中心收藏动态消息15创作中心vue调试工具vue-devtools安装及使用(最新)清虚桂意2020-06-2310:27:29606已收藏4分类专栏:vue版权github克隆vue-devtools官方项目地址gitclone-bv5.1.1https://github.com/vuejs/vue-devtools.git1此处安装v5.1

    2022年10月5日
    0
  • SprinBoot——SpringBoot项目WebSocket推送

    SprinBoot——SpringBoot项目WebSocket推送SprinBoot——SpringBoot项目WebSocket推送

    2022年4月23日
    45
  • Iocomp.Ultra Pack V5.SP3 for .Net Crack

    Iocomp.Ultra Pack V5.SP3 for .Net CrackIocomp的UltraPack是一套56个控件,用于创建专业仪器应用程序。这些控件是用100%托管代码编写的,Ω578867473支持Microsoft和Borland/CodeGear/Embarcadero开发环境。结合了我们的ProPack和PlotPack。所有控件都是面向对象的,并共享许多公共类以保持一致性、易于使用和相互连接。每个控件都经过优化,以在.Net框架下获得最佳性能,同时仍然使用高级GDI+绘图例程,这大大改善了控件的外观。大多数控件在与应用

    2022年7月25日
    9
  • 传统蓝牙HCI流控(HCI flow control)

    传统蓝牙HCI流控(HCI flow control)一.声明本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:第一篇:蓝牙综合介绍,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等第四篇:传统蓝牙host介绍,主

    2022年6月6日
    91
  • 物联网是随着智能化技术的发展_嵌入式物联网开发

    物联网是随着智能化技术的发展_嵌入式物联网开发&#13;&#13;&#13;&#13;&#13;&#13;&#13;从谷歌的AlphaGo将人工智能推进大众视野起,在可预见的未来,人工智能会涉及到我们生活的各个方面,…

    2022年10月4日
    1
  • Visual Studio 2017安装教程

    Visual Studio 2017安装教程下载VS2017组件选择及安装设置激活其它下载VS2017下载VS2017的安装器:http://msdn.itellyou.cn/我的安装版本为:VisualStudio2017(version15.7)VisualStudioProfessional2017(version15.7)(x86andx64)-(MultipleLanguages)下载此安…

    2022年5月26日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号