Java面向对象【对象的关联关系】

前言

在开发过程中,我们遇到的很多问题不是某一个对象单独能够解决的,可能是由多个不同类型的对象协作完成的,那么我们就需要在复杂的问题域中去找它们的关联(主要有三种对象的关联关系),让它们能够合作。

一、has - a 关系

1.概念

  • 在一个对象的内部 “拥有” 另一个对象
has-a 关联关系就是把一个对象 设计为 另外一个对象的属性(全局变量) 
  • 此时 关联分为 单向关联 和 双向关联
  • 单向:A里有个 B  或者   B里有个 A
  • 双:A里有个 B  并且   B里有个 A  (相互包含)
  • 把对方  设计为自己的属后,有个特点,两个对象的生命周期保持一致,在当前对象的所有方法中,可以访问到关联对象。

2.代码理解

场景:主人给猫喂食  猫就给撸给抱
一、
public class Master {
    //属性
    public String name; //姓名
    //修饰符 类名 变量名
    public Cat cat; //主人有猫  has关系

    //行为
    public void giveFood(){ //全局变量
        //喂猫
        System.out.println(name+"给"+cat.name+"喂食");
    }


}

二、
public class Cat {
//属性
    public String name;
    //此时 主人作为猫的属性
    public Master master;
//行为
    public void eat(){//主人喂食  给撸给抱
            System.out.println("给"+master.name+"撸、抱");
    }

}

三、
public class Main {
    public static void main(String[] args) {
//生成对象
        Master master =new Master();
        Cat cat=new Cat();
//赋值
        master.name="江小白";
        cat.name="毛孩子";
//建立关系  cat和master的联系 
        master.cat=cat;
        cat.master=master;
//操作对象
        //主人对象 调用giveFood方法 全局变量
        master.giveFood();
        master.cat.eat();

    }
}

二、use - a 关系

1.概念

  • 在一个对象的某个方法中 “使用”  另一个对象
use - a  依赖关系就是把一个对象 设计为 另外一个对象的某个方法的局部变量;
  • 该局部变量可以通过 参数传递 这个方法,其实也可以在方法内部去new一个
  • 上述两种方式都是use-a关系。因为不管是 参数传递还是方法内部声明定义,都是方法局部变量,方法结束,局部变量消失,关系就会解除。

2.代码理解

一、
public class Master {
    //属性  只有自己的名字  没有猫
    public String name; //姓名
    //喂养流浪猫 行为  (方法重载)
    public void giveFood(Cat cat2){//局部变量
        System.out.println(this.name+"喂养"+cat2.name+"猫粮");
        //喂完后 给回应  (放在方法里,方法结束,局部变量消失,关系就会解除)
        cat2.eat();
    }
}

二、
public class Cat {
//属性  猫自己的名字
    public String name;
//行为
    public void eat() {
        //流浪猫没有主人 相当于master为null
            System.out.println("流浪猫感动的留下了热泪..");
    }
}

三、
public class Main {
    public static void main(String[] args) {
//喂养流浪猫
        //生成对象
        Master master=new Master();
        Cat cat2=new Cat();

        //赋值
        master.name="江小白";
        cat2.name="流浪猫";

        //主人对象 调用giveFood方法(行为) 局部变量   实参cat2(流浪猫)
        master.giveFood(cat2);
    }
}

三、is - a 关系

指一个对象是另外一种对象的特例

你可能感兴趣的:(#,面向对象,java)