zoukankan      html  css  js  c++  java
  • 详解类与类的关联关系

    仔细想了类与类之间的关系,感觉很多资料书说得有很多地方都是不正确的,很多也没有说清楚。希望本篇文章能给读者一些帮助,也自勉。本篇文章引用了别人的东西,并非全部原创。

    一:一般化关系(也称泛化关系)

    UML的关系图:

    代码描述:

    public interface Animal {
         public void breath();
    }


     

    public class Dog implements Animal{
    	public void breath() {
            System.out.println("现在发出的是狗呼吸的声音"); 	
    	}
    }
    


    现在我们就可以说Animal与Dog这两个类之间的关系就是一般化关系。通俗一点说:两个类有继承关系或者implements关系就说这两个类是一般化关系。

    二:关联关系:

    UML关系图:

    代码描述:

    public class Driver {
       private Car car;
       public void start(){
    	   car.run();
       }
    }
    public class Car {
       public void run(){
    	   System.out.println("车子启动的方法");
       }
    }


    什么是关联关系呢?

    eg:司机类关联着车子类,而不能说车子类是司机类的一部分吧?!

    三:聚合关系:

    UML关系图:

    什么是聚合关系呢?

    就是has-a的关系,engine类和tire类都是属于car类的一部分。是整体与部分的关系!!但是注意:比如说这个engine可以是car类的一部分,也可以是冰箱类的一部分。engine可以被冰箱类引用。

    代码实现:

    public class Car {
       private Engine engine;
       public void run(){
    	   engine.begin();
       }
    }


     

    public class Engine {
       public void begin(){
    	   System.out.println("启动engine");
       }
    }


    看起来好像和关联差不多,但是本质已经改变了。

    四:合成关系:

    UML关系图:

    代码实现:

    public class Monkey {
       private Limb limb;
       public Monkey(){
    	   limb = new Limb();
       }
       public  void  useLimb(){
    	   limb.run();
       }
    }


     

    public class Limb {
        public void run(){
        	System.out.println("行走的方法");
        }
    }
    


    很多人都使用setter的方法注入,我认为是不对的。用构造方法注入才能体现出是合成关系。

    什么是合成关系,到底聚合关系和合成关系的区别是什么?

    我查阅了很多的资料,都说的不很清楚,实际上,合成关系也是聚合关系,但是注意:比如说limb只能属于美猴王的,不能被其它的类引用。它的生命周期随另一个类的生命周期的开始而开始,结束而结束。

    五:依赖关系:

    代码实现:

    public class perosn {
       public void buy(House house){
    	   house.live();
       }
    }


     

    public class House {
       public void live(){
    	   System.out.println("买了,你就能住了");
       }
    }


    注意:依赖关系的时候,一个对象不会作为另一个类属性!!!!!!

  • 相关阅读:
    Redis的主从复制
    JVM之jps命令
    ThreadLocal源码分析
    ThreadLocal初体验
    Redis的逐出算法
    Redis的删除策略
    DagScheduler 和 TaskScheduler
    数据挖掘的数据预处理
    日志实时收集和计算的简单方案
    spark ml 的例子
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3161400.html
Copyright © 2011-2022 走看看