面向对象的6种关系:关联,聚合,组合,泛化,依赖,实现

1.单项关联Association

在这里插入图片描述

一个类的实例Customer使用另外一个类的实例Address,这两个对象之间为关联关系。



public class Customer {

   
private Address address;

   
private String name;

   
public String getName() {

       
return name;

    }

   
public Address getAddress() {

       
return address;

    }

   
public void setAddress(Address address) {

       
this.address = address;

    }

}

 

public class Address {

   
private  String name;

   
public Address(String name) {

       
this.name = name;

    }

   
public String getName() {

       
return name;

    }

   
public void setName(String name) {

       
this.name = name;

    }

}

2.聚合Aggregation

在这里插入图片描述

聚合是关联的一种,耦合度更高,代码样式差不多,仅仅是语义有区别,关联对象相互独立的,而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。KeyBoard是Computer的一部分,要构成Computer就需要具备KeyBoard这个类。



public class Computer {

   
private KeyBoard keyBoard;

   
public KeyBoard getKeyBoard() {

       
return keyBoard;

    }

    public
void setKeyBoard(KeyBoard keyBoard) {

       
this.keyBoard = keyBoard;

    }

}

 

public class KeyBoard {

   
private String name;

   
public KeyBoard(String name){

       
this.name=name;

    }

   
public String getName() {

       
return name;

    }

   
public void setName(String name) {

       
this.name = name;

    }

}

3.组合Compostion

在这里插入图片描述

相比于聚合,组合是一种耦合度更强的关联关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死的;并且“部分”单独存在时没有任何意义。Desk的构成需要DeskTop和Leg,然而单独的DeskTop和Leg并不具备任何现实的意义,它们是不可分割的一部分。



public class Desk {

   
private DeskTop deskTop;

   
private Leg[] legs;

   
public Desk() {

       
deskTop=new DeskTop("桌面");

       
legs=new  Leg[4];

       
legs[0]=new Leg("腿1");

       
legs[1]=new Leg("腿2");

       
legs[2]=new Leg("腿3");

       
legs[3]=new Leg("腿4");

    }

       
public String toString() {

       
return String.format("桌子有一个%s,还有%s、%s、%s、%s",deskTop.getName(),legs[0].getName(),legs[1].getName(),legs[2].getName(),legs[3].getName());

    }

}

 

public class DeskTop {

   
private String name;

   
public DeskTop(String name){

       
this.name=name;

    }

    public String getName() {

       
return name;

    }

   
public void setName(String name) {

       
this.name = name;

    }

}

 

public class Leg {

   
private String name;

   
public Leg(String name){

       
this.name=name;

    }

   
public String getName() {

       
return name;

    }

   
public void setName(String name) {

       
this.name = name;

    }

}

4.泛化 Generalization
在这里插入图片描述

Dog和Fish都是Animal的子类,Animal会eat()方法,Dog和Fish都会eat()方法,Dog还具有run()方法,Fish还具有swim()方法。



public class Animal{

       public
void eat(){

       System.out.println(“动物会吃”);

}

}

 

public class Bird extends Animal{

       public
void fly(){

       System.out.println(“鸟会飞”);

}

}

 

public class Dog extends Animal{

       public
void run(){

       System.out.println(“狗会跑”);

}

}

5.依赖Dependency

在这里插入图片描述

Human类具有两个方法,read(),和eat()方法,这两个方法对应的参数类型是Book类和Food类,所以Human类分别和Book类,Food类都有依赖关系。



public class Human{

       public
void read(Book book){

              System.out.println(“看”+book.getName());

}

public void eat(Food
food){

              System.out.println(“吃”+food.getName());

}

}

 

public class Book{

       private
String name;

       public
String getName(){

              return
name;

}

public void
setName(String name){

       this.name=name;

}

}

 

public class Food{

       private
String name;

       public
String getName(){

              return
name;

}

public void setName(String
name){

       this.name=name;

}

}

6.实现Realization

在这里插入图片描述

Student和Teacher都是People,他们都具有People这个接口,涵盖着里面的方法。Student和Teacher重载了相应的sleep()方法。



public interface People{

       void
sleep();

}

 

public class Student implements People{

       public
void sleep(){

              System.out.println(“学生睡觉”);

}

}

 

public class Teacher implements People{

       public
void sleep(){

              System.out.println(“老师睡觉”);

}

}

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值