类之间的关系-以java为例

java类之间一般有6种关系,依赖、关联、聚合、组合、继承(泛化)、实现。

耦合度:依赖<关联<聚合<组合<继承<实现

依赖关系

简单来说,使用即依赖。A类会用到B类,这种关系具有偶然性,临时性。比如使用一个类的属性、方法,或以其作为方法的参数传入,或以其作为方法的返回值输出。[depends-a]

public class Person {
public static void speak(){
System.out.println("人说话");
}
}
class Student {
//使用形参方式发生依赖关系
public void speak1(Person person){
person.speak();
}
//使用局部变量发生依赖关系
public void speak2(){
Person person = new Person();
person.speak();
}
//使用静态变量发生依赖关系
public void speak3(){
Person.speak();
}
}

关联关系

A类会用到B类,这是一种强依赖关系,是长期的并非偶然。在代码中的表现为:A类的成员变量中含有B类。关联可以是双向的,也可以是单向的。在JAVA中,单向关联表现为:类A当中使用了类B,其中类B是作为类A的成员变量。双向关联表现为:类A当中使用了类B作为成员变量;同时类B中也使用了类A作为成员变量。[Association]

public class Phone {
public void call(){
System.out.println("打电话");
}
}
class User {
//使用成员变量形式实现关联
Phone phone = new Phone();
public void use(){
phone.call();
}
}

聚合关系

关联关系的一种特例,是强的关联关系,是整体和部分的关系,即has-a的关系。整体和部分之间是可分离的,拥有各自的生命周期。 和组合关系的整体和部分关系不同的是:该整体包含很多个部分,但这里的部分都是相同的。它是类(或实体)之间的一种单向关系。例如:钱包和钱,钱包会有钱,钱里面不会包含钱包;这是一种天生的单向关系。

在聚合的关系中,两种类(或实体)是可以单独存在的,不会相互影响;也就是说:一个类(或实体)的是否存在不会影响与之聚合的其他类的存在与否。在JAVA中,聚合关系一般使用成员变量来实现,聚合和关联关系两者的代码表现是相同的,仅仅是在语义上有所区别。

public class Wallet {
Money money;
//聚合关系中作为成员变量的类一般使用set方法赋值
public void setCounts(Money money){
This.money = money;
}
}

组合关系

组合是一种受限制的聚合形式,代表了part-of关系;其中的两个实体(或者类)是高度依赖于彼此的。就好比如:人类和心脏,人类需要心脏来生存,心脏也需要人体才能生存。

换句话说,当类(实体)彼此依赖并且它们的寿命相同时(如果一个人死了,那么另一个也是死去),那么它就是一个组合。例如:如果没有人类,心脏就没有意义了。

public class Person {
Brain brain;
Heart heart;

//组合关系中的成员变量一般会在构造方法中赋值
Public Person(Brain brain, Heart heart){
This.brain = brain;
This.heart = heart;
}

public void think(){
System.out.println(brain.toString() + "思考");
}
public void beat(){
System.out.println(heart.toString() + "跳动");
}
}

组合依赖区别:

1.聚合是一种弱关联关系;组合是一种强关联关系。

2.聚合代表了has-a关系,一种单向关系;组合代表了part-of关系。

3.聚合中的两种类(或实体)是可以单独存在的,不会相互影响;被关联的一方可以独立于关联一方,依赖性不强。相反,组合中的两个实体(或者类)是高度依赖于彼此的,它们之间会相互影响。

4.在聚合关系中的两个类(或实体)的生命周期是不同步;但,在组合关系中的两个类(或实体)的生命周期是同步的。

继承(泛化)关系

即“is-a”关系,是一种用于表示特殊与一般关系的。表示类与类(或者接口与接口)之间的父子关系。一般而言,如果类A扩展类B,类A不但包含从类B继承的方法,还会拥有一些额外的功能。在JAVA中,用关键字extends表示继承关系

实现关系

类和接口之间的关系,表示一个类实现一个或多个接口的方法。接口定义好操作的集合,由实现类去完成接口的具体操作。在java中使用implements表示。

参考链接

https://blog.csdn.net/bupa900318/article/details/80650886

https://cloud.tencent.com/developer/article/1478673

猜你喜欢

转载自www.cnblogs.com/hhd-shuai/p/12497646.html