一、类、接口的表现形式
抽象类:
另外一种表示方式为 类名是斜体
类之间的关系
1、泛化关系 (在java中表示为继承)
2、实现关系(体现在一个类实现一个接口)
3、依赖关系
4、关联关系
5、聚合关系
6、组合关系
泛化关系
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系;,在Java中通过关键字extends来表示。
从子类指向父类。
public abstract class Father {
Integer age;
String name;
}
public class Son extends Father{
}
public class Daughter extends Father {
}
实现关系
体现在一个类实现一个(或多个)接口;Java中通过implements关键字来表示。
public interface Person {
}
public abstract class Father implements Person{
Integer age;
String name;
}
依赖关系
依赖关系表示一个类依赖于另外一个类的定义,依赖关系时是单向的。简单理解就是类A使用到了类B,这种依赖具有偶然性、临时性,是非常弱的关系。但是类B的变化会影响到类A。举个例子,如某人要过河,则人与船的关系就是依赖,人过河之后,与船的关系就解除了,因此是一种弱的连接。在代码层面,为类B作为参数被类A在某个方法中使用。
public interface Person {
void toRiver(Ship ship);
}
public class Ship {
//船只编号
private String shipNum;
}
关联关系
关联关系体现的是两个类,或者类与接口之间的强依赖关系,这种关系很强烈,比依赖更强,不是偶然性的,也不是临时性的,而是一种长期性,相对平等的关系,表现在代码层面,为被关联的类B以类属性的形式出现在类A中**,也可能是关联类A引用了被关联类B的全局变量。
在Java中,关联关系是使用实例变量来实现的
public class Mother {
private Son son;
private Daughter daughter;
}
public class Daughter {
}
public class Son {
}
聚合关系
聚合关系是关联关系的一种情况。聚合关系表示整体与部分的关系。在聚合关系中,成员对象是整体的一部分,但是成员对象可以脱离整体对象独立存在。
代码实现聚合关系,成员对象通常以构造方法、Setter方法的方式注入到整体对象之中。
如汽车(Car)与引擎(Engine)、轮胎(Wheel)、车灯(Light),Java表示为:
public class Engine {
}
public class Wheel {
}
public class Light {
}
public class Car {
private Engine engine;
private Light light;
private Wheel wheel;
// 构造 属性由外部传入
public Car(Engine engine, Light light, Wheel wheel) {
super();
this.engine = engine;
this.light = light;
this.wheel = wheel;
}
public void drive() {
}
}
组合关系
组合关系是关联关系的一种情况。比聚合更强,是一种强聚合关系。它同样体现整体与部分的关系,但此时整体与部分是不可分的,整体生命周期的结束也意味着部分生命周期的结束;反之亦然。如大脑和人类。
组合与聚合几乎完全相同,唯一区别就是对于组合,“部分”不能脱离“整体”单独存在。
代码实现组合关系,通常在 整体类的构造方法中直接实例化成员类,这是因为组合关系的整体和部分是共生关系,如果通过外部注入,那么即使整体不存在,那么部分还是存在的,这就相当于变成了一种聚合关系了。
public class Head {
}
public class Person {
private Head head;
//构造 属性 直接创建对象
public Person() {
this.head = new Head();
}
}