java 类与类之间的关系
励志就像给自己插上翅膀,才能飞得更高;炼造一双千里眼,才能望得更远。满载而行,即使困难重重,留下的汗水也终会获得回报;满载而行,即使艰辛与泪水并存,前方的道路也依然光明;满载而行,即使跌倒,也将有勇气迈向成功。
泛化/继承(Generalization)
实现(Realization)
依赖(Dependency)
关联(Association)
聚合(Aggregation)
组合(Composition)
类型 | 标识 | 描述 | 效果 |
---|---|---|---|
组合(Composition) | –* | 实线菱形填充箭头 | |
聚合(Aggregation) | –o | 实线空心菱形箭头 | |
实现(Realization) | –|> | 实线空心三角箭头 | |
泛化/继承(Generalization) | …|> | 虚线三角空心箭头 | |
关联(Association) | -> | 实现箭头 | |
依赖(Dependency) | …> | 虚线箭头 |
泛化/继承(Generalization)
泛化不好理解,继承肯定大家非常熟悉子类继承父类,父类的方法变量都可以应用的到,父类相当于子类就是’透明’的
public class A {
}
public class B extends A{
}
在就说B继承/泛化自A
…|>虚线实心箭头表示
UML类图(1.1)
:
实现(Realization)
实现可以简单的理解就是实现类,什么才能实现?那肯定是接口了
public interface A {
}
public class B implements A{
}
这里就称B是A的实现类
–|>空心实线箭头表示
UML类图(1.2)
:
依赖(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)
这里就可以称之为B依赖于A,C,D,E
总结:
在一个类中,成员变量
返回值
局部变量
参数传递
都称之为有依赖关系
简单一句话概括:在这个类中出现其他类,当前类依赖于其他的类
关联(Association)
依赖关系的特例,实际就是类与类之间的联系
关联关系又分为:
单向关联关系
双向关联关系
单向关联关系
public class A{
B b = new B();
}
public class B{
}
上边也提到了,关联关系是依赖关系的特例
依赖关系就是指两个类之间只要有联系他就是依赖关系
A类中有B类那么A类和B类就是单向关联关系
实现箭头表示
UML类图(1.4)
:
双向关联关系
通过上面的单向关联关系,双向关联关系更好理解
public class A{
B b = new B();
}
public class B{
A a = new A();
}
这种A类中包含B类,B类中包含A类的就称之为有 关联关系
实现箭头表示:
UML类图(1.5)
:
聚合(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类作为全局(成员)变量
那么这里就称之为A类B类聚合到C类
就好比电脑和鼠标的关系
电脑可以和鼠标分离吗?
当然可以分离
所以也可以称之为鼠标聚合到电脑上!
用实心空心菱形表示
UML类图(1.6)
组合 (Aggregation)
整体与部分不可分离称之为组合(也是关联关系的特例)
public class A{}
public class B{
A a = new A();
}
像这种,在B创建的时候A也跟随创建,无法分离的,就称之为组合关系
UML类图(1.7)
:
总的来说,强弱程度依次为:组合>聚合>关联>依赖
总结:
依赖关系:只要两个类有交互(…>)
泛化/继承关系: 子类继承父类(…|>)
实现关系:接口与实现类的关系(–|>)
聚合关系:成员(全局)变量,没有直接new,可与整体分割 (–o)
组合关系:成员(全局)变量,直接new,不可与整体分割(–*)
关联关系:依赖关系的特例(–>)
原创不易,记得点赞哦~