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


相关推荐

  • springboot使用h2数据库做单元测试_h2数据库对接SQL

    springboot使用h2数据库做单元测试_h2数据库对接SQLh2数据库很方便,不用安装,我们在springboot项目中添加相关依赖就可以了。maven配置&amp;lt;dependency&amp;gt;&amp;lt;groupId&amp;gt;com.h2database&amp;lt;/groupId&amp;gt;&amp;lt;artifactId&amp;gt;h2&amp;lt;/artifactId&amp;gt;

    2022年10月9日
    2
  • navigator对象_navigator.geolocation

    navigator对象_navigator.geolocationNavigator对象包含有关浏览器的信息,是BOM对象。一、Navigator对象属性属性 说明 appCodeName 返回浏览器的代码名 appName 返回浏览器的名称 appVersion 返回浏览器的平台和版本信息 cookieEnabled 返回指明浏览器中是否启用cookie的布尔值 platform 返回运行…

    2025年10月28日
    1
  • 组合数的各种性质和定理

    组合数的各种性质和定理从m个物品里选出n个的方案数,记作CnmCmnC_m^n,即为组合数组合数有很多很多的性质和定理。。。注意由于本人沉迷玩梗无法自拔,如果看见您看不懂的梗请随意跳过。组合数通项公式Cnm=m!n!∗(m−n)!Cmn=m!n!∗(m−n)!C_m^n=\frac{m!}{n!*(m-n)!}证明:现在我们从m个不同的数里选出n个数组成一个排列,第一个位子上的数有m种取法,第二…

    2022年7月15日
    13
  • 简述android触屏事件的处理_移动端touch事件有哪些

    简述android触屏事件的处理_移动端touch事件有哪些本文介绍了Android系统中触屏事件的相关知识,包括触屏事件的产生,分类,触屏事件序列,以及触屏事件在代码中的表示方式。了解这些内容,是理解Android触屏事件的分发,拦截和处理的基础。

    2025年10月19日
    3
  • TD-SCDMA特点_TDD-LTE

    TD-SCDMA特点_TDD-LTETD-SCDMA的提出比其他标准较晚,这给其产品成熟性带来一定的挑战,但在另一方面,TD-SCDMA吸纳了九十年代以来移动通信领域最先进的技术,在一定程度上代表了技术的发展方向,具有前瞻性和强大的后发优势。与其他3G标准相比,TD-SCDMA系统及其技术有着如下突出优势:  频谱效率高  TD-SCDMA系统综合采用了联合检测、智能天线和上行同步等先进技术,系统内的…

    2022年10月3日
    2
  • ap调试教程_超声波发生器说明书

    ap调试教程_超声波发生器说明书前言:在传统APA自动泊车系统中,通常使用超声波雷达进行车辆前后辈避障以及侧向车位探测。目前市场上大多数带有自动泊车功能的车辆均配有12个超声波雷达,本文从硬件安装及超声波雷达调试标定两方面对自动泊车超声波雷达的安装调试进行说明1硬件安装自动泊车配置的超声波雷达一般为两组12个雷达探头。单组6个雷达探头串联,其中第1和第6号雷达为长距LRU雷达,2-4号为短距SRU避障雷达。超声探头均…

    2025年10月26日
    2

发表回复

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

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