指的是一个类(称为子类,子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能,继承是类与类或者接口与接口之间最常见得关系,一个类最多只能继承一个类
public class ClassA extends ClassB {
}
public class ClassB {
}
指的是一个class类实现interface接口(可以多实现),实现是类与接口之间最常见关系。在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性
public class ClassA implements InterfaceA {
@Override
public void test() {
}
}
public interface InterfaceA {
void test();
}
可以简单的理解,就是一个类A使用到另一个类B,而这种使用关系是具有偶然性、临时性,但B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖,为类B作为参数被类A在某个method方法中使用
public class ClassA {
public void depend(ClassB b){
}
}
public class ClassB {
}
或A为一个圆柱体类,要求A实例的体积
//圆柱体类
public class A {
public static void main(String[] args) {
double zArea = 0;
//底面积及为一个圆(B类)的面积
B b = new B();
double height = 1.6;
//调用B类的getArea()方法,形成依赖关系
zArea = b.getArea(4)*height;
}
}
//圆类B
public class B {
public double getArea(int r){
double area = 0;
area = Math.PI*r*r;
return area;
}
}
它体现的是两个类、或者类与接口之间语义级别的一种强依赖关系。比如我和我的朋友,这种关系比依赖更强、不存在依赖关系的偶然性、临时性,一般是长期性而且双方的关系一般是平等的;关联可以是单向的,也可以是双向的,表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;
public class ClassA {
private ClassB classB;
}
public class ClassB {
}
聚合是关联关系的一种特例,聚合关系是整体和个体/部分之间的关系,即has-a(包含)的关系;关联关系的两个类处于同一个层次上,而聚合关系的两个类处于不同的层次上,一个是整体,一个是个体/部分;在聚合关系中,代表个体/部分的对象有可能会被多个代表整体的对象所共享
has-a 是组成关系,在组成关系中,一个对象将一个或者多个其它对象作为自己的成员。
public class Family{
int id;
String name;
Child child;//Child is a class
...
}
在这种情况下,Family有一个实体引用Child,因此关系是:Family HAS-A Child。
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;房子和房间的关系,当房子没有了,房间同样不可能单独存在
//房子
public class House {
private Room room ;
public House(){
room = new Room() ;
}
public void createHouse(){
room.createRoom() ;
}
}
//房间
public class Room {
public Room createRoom(){
System.out.println("创建房间");
return new Room() ;
}
}
聚合和组合的区别:聚合是个体离开了整体,依然可以存在
组合是个体和整体不可以分开,个体不能离开整体单独存在
几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;