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

前言

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

类的关系

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

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

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

(3)use a-->依赖

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

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

 代码:

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

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

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

代码:

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的带箭头虚线表示。

代码:

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

class Computer{}

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

代码:

class Person{
	private Shoes mShoes;

	public Shoes getmShoes() {
		return mShoes;
	}

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

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

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

代码:

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

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

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

代码:

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

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

猜你喜欢

转载自blog.csdn.net/hongtaolong/article/details/84067985
今日推荐