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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库课程实践—仓库管理系统(附代码下载)

    数据库课程实践—仓库管理系统(附代码下载)数据库课程实践-仓库管理系统桌面应用程序数据库:SQLServer2008r2IDE:VS2010完成功能:(1)产品入库管理,可以填写入库单,确认产品入库;(2)产品出库管理,可以填写出库单,确认出库;(3)借出管理,凭借条借出,然后能够还库;(4)仓库库存设置,设置库存的初始值,更改库存的上下限值;(5)可以进行盘库,按货物分类,仓库分类和按货号和仓库查找;

    2022年5月12日
    36
  • C语言中数组的总结

    C语言中数组的总结目录一维数组的创建和初始化一维数组的使用一维数组在内存中的存储指针的初步介绍一维数组的指针访问二维数组的创建和初始化二维数组的使用二维数组在内存中的存储二维数组的指针访问有关数组的运算数组作为函数参数1.一维数组的创建和初始化数组的创建:在创建数组时,我们必须定义数组的类型和大小,数组的大小不能为0,数组中的元素类型都是相同的。eg:intarr[

    2022年5月2日
    50
  • CSS:Tutorial two

    CSS:Tutorial two

    2021年7月2日
    102
  • 服务器配置[通俗易懂]

    服务器配置[通俗易懂]Nginx配置文件的整体结构从图中可以看出主要包含以下几大部分内容:1.全局块该部分配置主要影响Nginx全局,通常包括下面几个部分:配置运行Nginx服务器用户(组)workerpro

    2022年8月4日
    2
  • quartz定时任务不执行(任务统筹策略)

    由于某种原因,例如应用停掉,导致定时任务错过了本该执行的时间点,这就是定时任务过期。对于过期的定时任务,我们需要基于某种策略对其进行处理。过期策略在Trigger接口中定义了两种过期策略,publicstaticfinalintMISFIRE_INSTRUCTION_SMART_POLICY=0;publicstaticfinalintMISF…

    2022年4月11日
    1.5K
  • JS对象的遍历方法

    JS对象的遍历方法法一:使用for…in…循环varobj={‘0′:’a’,’1′:’b’,’2′:’c’};for(letiinobj){console.log(i,”:”,obj[i]);//{0:a,1:b,2:c}}法二:使用Object.keys遍历varobj={‘0′:’a’,’1′:’b’,’2′:’c’};Object.keys(obj).forEach(function(key){ console.log(key,obj[key]);//{0:a,1:

    2022年8月30日
    1

发表回复

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

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