JAVA中类与类之间的关系

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() {
        //具体实现
    }
}

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值