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{}

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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • currentstyle 织梦_织梦arclist标签支持高亮currentstyle属性方法

    currentstyle 织梦_织梦arclist标签支持高亮currentstyle属性方法找到include/taglib/arclist.lib.php第一步:查找:$channelid=$ctag->GetAtt(‘channelid’);替换:$channelid=$ctag->GetAtt(‘channelid’);$currentstyle=$ctag->GetAtt(‘currentstyle’);第二步:查找:$ct…

  • GitHub 热榜:轻量级无 Agent 的自动化运维平台!「建议收藏」

    GitHub 热榜:轻量级无 Agent 的自动化运维平台!「建议收藏」大家好,我是JackTian。作为一名运维工程师,大家都知道。早在几年前,偏传统运维,以cacti、nagios为主流,到后来的zabbix、Prometheus、Open-Falcon等,也是现在大多数企业用的偏多的运维监控平台。甚至有些企业,都是自主研发。不管是自主研发还是用开源的,其最终目的都是为了提高日常运维工作效率。那么,今天杰哥给大家推荐一款GitHub热榜开源运维平台——spug。这款开源运维平台是:面向中小型企业设计的轻量级无Agent的自动化运维平台,其主要功能

  • KTT条件_kkt条件全称

    KTT条件_kkt条件全称上篇文章说了,拉格朗日乘子法,可以在等式约数的条件下,求得某函数f的极大或极小值,但是,等式约束只是不等式约束中的特例,如果我们遇到了不等式约束,该怎么办呢?本片不打算放图了,感觉完全可以接着上一篇继续搞!首先,对于等式约数,我们可以看成我们自变量可以取的点组成的几条线,也就是约束函数在某高度上的等高线。不过约束换成了不等式约束以后,此时约束就可能由“线”变成了面。但是,看上去需要考虑的取值…

    2022年10月21日
  • 一步到位分布式开发Zookeeper实现集群管理

    一步到位分布式开发Zookeeper实现集群管理

  • wireshark安装教程_weblogic12.2.1.3下载

    wireshark安装教程_weblogic12.2.1.3下载自动化监控海量win主机日志。

    2022年10月15日
  • Js保留两位小数_小数点保留两位方法

    Js保留两位小数_小数点保留两位方法javascript语言,因为是弱类型语言,没有java那么多类型,所以在处理浮点数保留两位小数上,没有那么多办法,su但是字符串和整数,浮点数还是有区别的,

发表回复

您的电子邮箱地址不会被公开。

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