JAVA中类与类之间主要存在6种关系,分别是:依赖,关联,聚合,组合,继承,实现。他们的耦合度依次增强。
关联与聚合与组合三者的相关术语相同,但在JAVA中关联类的方式上存在一些重大的差异
依赖
"uses - a" 即依赖关系,A类会用到B类,这种关系具有偶然性,临时性。但B类的变化会影响A类。一般而言,依赖关系在JAVA中体现为局域变量、方法的形参,或者对静态方法的调用。 在代码中体现为:A类方法中的参数包含了B类。
代码实现:
class People{
public static void say(){
System.out.println("我是人");
}
}
class Student{
//使用形参方式发生依赖关系
public void AStudent(People people){
people.say();
}
//使用局部变量发生依赖关系
public void BStudent(){
People p = new People();
p.say();
}
//使用静态变量发生依赖关系
public void CStudent(){
People.say();
}
}
关联
A类会用到B类,这是一种强依赖关系,是长期的并非偶然,是类与类之间的联接。它使一个类知道另一个类的属性和方法。代码中表现为:单向关联表现为:类A当中使用了类B,其中类B是作为类A的成员变量。双向关联表现为:类A当中使用了类B作为成员变量;同时类B中也使用了类A作为成员变量。
单向关联:
class Son{
public static void getGift(){
System.out.println(“我已经拿到了礼物”);
}
}
class Father{
//使用成员变量形式实现关联
Son son = new Son();
public void giveGift(){
son.getGigt();
}
}
双向关联:
class Son{
//关联关系中作为成员变量的类一般会在类中赋值
Father father = new Father();
public void getGift(){
System.out.println(“从”+father.getName()+”获得礼物”);
}
}
class Father{
Son son = new Son();
public void giveGift(){
System.out.println(“送给”+son.getName()+“礼物”);
}
}
聚合
“has - a”关系,即聚合关系,拥有关系,是关联关系的一种特例,是整体和部分的关系。比如鸟群和鸟的关系是聚合关系,鸟群中每个部分都是鸟。
public class People{
Car car;
House house;
//聚合关系中作为成员变量的类一般使用set方法赋值
public void setCar(Car car){
This.car = car;
}
public void setHouse(House house){
This.house = house;
}
public void driver(){
System.out.println(“车的型号:”+car.getType());
}
public void sleep(){
System.out.println(“我在房子里睡觉:”+house.getAddress());
}
}
组合
“contain-a”关系,即组合关系也是关联关系的一种特例,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分的关系,但这种整体和部分是不可分割的。
Public class People{
Soul soul;
Body body;
//组合关系中的成员变量一般会在构造方法中赋值
Public People(Soul soul, Body body){
This.soul = soul;
This.body = body;
}
Public void study(){
System.out.println(“学习要用灵魂”+soul.getName());
}
Public void eat(){
System.out.println(“吃饭用身体:”+body.getName());
}
}
继承(Generalization)
“is-a”关系,表继承。即类与类(或者接口与接口)之间的父子关系。在JAVA中,用关键字extends表示继承关系
class People{
public static void say(){
System.out.println("我是人");
}
}
class Student extends People{
public static void main(String[] args) {
say();
}
}
实现(Implementation)
表示一个类实现一个或多个接口的方法。在java中使用implements表示。
interface People{
public void say();
}
public class Student implements People{
@Override
public void say() {
//具体实现
}
}