java类和类之间的关系

java类和类之间的关系

概览

5种关系

  1. 依赖(dependency)
  2. 关联(association)
  3. 聚合(aggregation)
  4. 组合(composition)
  5. 继承(inheritance)可以更加细得分为实现(realization)和泛化(generalization)

从上至下依赖关系逐渐增强

详细说明区别

其实依赖关联聚合组合 都是差不多的,在日常的表达中也很容易混为一谈,特别是聚合和组合更加容易混为一谈(我感觉也没必要区分这么细,都是 “我中有你”)。

详细的含义如下

  1. 依赖:单向,类A依赖类B,是A在局部变量、方法入参、静态调用中出现了B(我觉得方法出参中出现B应该也算依赖),类似 use a
  2. 关联:可以单向双向(避免双向,它是一种循环依赖),类之间是一种比较平等的关系。类似 has a
  3. 聚合:是特殊的关联,跟关联的区别仅仅是语义上,比如关联的两个类的关系比较平等,但是聚合是不平等的,聚合是整体和个体的区别。对象的生命周期是 “整体死了,但是个体还在”(详细看代码以加深印象)
  4. 组合:是特殊的聚合,也仅仅是语义的差别。聚合是 “整体死了,个体还在”,组合是 “整体死了,个体也死了”,个体是整体的组成部分(详细看代码以加深印象)
  5. 继承:就是类继承类,类继承抽象类,类实现接口,接口继承接口这些关系。跟上面4个很好区分。其中也可以再细分为实现泛化,实现就是类实现接口,泛化就是类继承类、类继承抽象类、接口继承接口。泛化是一种 is a

用代码说明区别

  • 依赖
// use a
// 方法入参的依赖
public class Person {
  public void drink(Water w) {
  }
}
// 局部变量的依赖
public class Person {
  public void goOut() {
  	Car car = new Car();
  }
}
// 静态调用的依赖
public class Person {
  public void born() {
  	String idCardNo = IdCardUtil.getIdCardNo();
  }
}
// 方法出参的依赖
public class Person {
  public Profile getProfile() {
	
	}
}
  • 关联(是一种平等的关系),表示has a(有一个),比如这里的 “人有一个手机”
// has a
public class Person {
	private Phone phone;
	public void setPhone(Phone phone) {
		this.phone = phone;
	}
	public Phone getPhone() {
		return this.phone;
	}
}
  • 聚合:整体死了个体还没死
// Team被JVM回收时,persons不被回收,个体还存在
public class Team {
	private List<Person> persons;
	public Team(List<Person> persons) {
		this.persons = persons;
	}
}
  • 组合:整体死了,个体也死,个体是整体的组成部分
// Person被JVM回收后,各部分也被回收
public class Person {
	private Head head;
	private Body body;
	private List<Arm> arms;
	private List<Leg> legs;
	
	public Person() {
		this.head = new Head();
		this.body = new Body();
		this.arms = Lists.newArrayList<Arm>(new Arm("左臂"), new Arm("右臂"));
		this.legs = Lists.newArrayList<Leg>(new Leg("左腿"), new Leg("右腿"));
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值