vlambda博客
学习文章列表

java 类与类之间的关系

励志就像给自己插上翅膀,才能飞得更高;炼造一双千里眼,才能望得更远。满载而行,即使困难重重,留下的汗水也终会获得回报;满载而行,即使艰辛与泪水并存,前方的道路也依然光明;满载而行,即使跌倒,也将有勇气迈向成功。


  • 泛化/继承(Generalization)

  • 实现(Realization)

  • 依赖(Dependency)

  • 关联(Association)

    • 聚合(Aggregation)

    • 组合(Composition)

类型 标识 描述 效果
组合(Composition) –* 实线菱形填充箭头
聚合(Aggregation) –o 实线空心菱形箭头 java 类与类之间的关系
实现(Realization) –|> 实线空心三角箭头 java 类与类之间的关系
泛化/继承(Generalization) …|> 虚线三角空心箭头 java 类与类之间的关系
关联(Association) -> 实现箭头 java 类与类之间的关系
依赖(Dependency) …> 虚线箭头 java 类与类之间的关系

泛化/继承(Generalization)

泛化不好理解,继承肯定大家非常熟悉子类继承父类,父类的方法变量都可以应用的到,父类相当于子类就是’透明’的

public class A {}public class B extends A{}

在就说B继承/泛化自A

…|>虚线实心箭头表示

UML类图(1.1):

java 类与类之间的关系

实现(Realization)

实现可以简单的理解就是实现类,什么才能实现?那肯定是接口了

public interface A {}public class B implements A{}

这里就称B是A的实现类

–|>空心实线箭头表示

UML类图(1.2):

java 类与类之间的关系

依赖(Dependency)

依赖也非常好理解,2个类之间只要有交互,就称之为有依赖

public class A {}public class C {}public class D {}public class E {}
public class B { public A mA;
public C getC(){ return null; }
public void showD(){ D d = new D(); }
public void setE(E e){
}}

可以看到在B类()中有4中方式引用了其他的类:

  • public A mA; 成员变量

  • public C getC(){ //返回值
    return null;
    }

  • public void showD(){ //局部变量 这里违反了迪米特原则
    D d = new D();
    }

  • public void setE(E e){ //参数构造的方法

    }

只要有交互,就称之为有依赖关系

虚线箭头表示

UML类图(1.3)

java 类与类之间的关系

这里就可以称之为B依赖于A,C,D,E

总结:

  • 在一个类中,成员变量

  • 返回值

  • 局部变量

  • 参数传递

都称之为有依赖关系

简单一句话概括:在这个类中出现其他类,当前类依赖于其他的类

关联(Association)

依赖关系的特例,实际就是类与类之间的联系

关联关系又分为:

  • 单向关联关系

  • 双向关联关系

单向关联关系

public class A{ B b = new B();}
public class B{}

上边也提到了,关联关系是依赖关系的特例

依赖关系就是指两个类之间只要有联系他就是依赖关系

A类中有B类那么A类和B类就是单向关联关系

实现箭头表示

UML类图(1.4):

java 类与类之间的关系

双向关联关系

通过上面的单向关联关系,双向关联关系更好理解

public class A{ B b = new B();}public class B{ A a = new A();}

这种A类中包含B类,B类中包含A类的就称之为有 关联关系

实现箭头表示:

UML类图(1.5):

java 类与类之间的关系

聚合(Composition)

整体和部分可以分开(是关联关系的特例)

public class A{}public class B{}public class C{ A a ; B b; public int run(int min,int max){ return min + max; }  void setA(A a){ this.a = a; }  void setB(B b){ this.b = b; }}

通过代码可以看到:

C类中,有一个run()方法,求的是min + max,在这里就没有用到了A类和B  但是呢C类中吧A类和B类作为全局(成员)变量
 那么这里就称之为AB类聚合到C

就好比电脑和鼠标的关系

电脑可以和鼠标分离吗?

当然可以分离

所以也可以称之为鼠标聚合到电脑上!

用实心空心菱形表示

UML类图(1.6)

java 类与类之间的关系

组合 (Aggregation)

整体与部分不可分离称之为组合(也是关联关系的特例)

public class A{}
public class B{ A a = new A();}

像这种,在B创建的时候A也跟随创建,无法分离的,就称之为组合关系

UML类图(1.7):



总的来说,强弱程度依次为:组合>聚合>关联>依赖

总结:

  • 依赖关系:只要两个类有交互(…>)

  • 泛化/继承关系: 子类继承父类(…|>)

  • 实现关系:接口与实现类的关系(–|>)

  • 聚合关系:成员(全局)变量,没有直接new,可与整体分割 (–o)

  • 组合关系:成员(全局)变量,直接new,不可与整体分割(–*)

  • 关联关系:依赖关系的特例(–>)

原创不易,记得点赞哦~