类与类之间的关系-依赖,关联,聚合,组合,继承泛化的区别

1)依赖
依赖关系是类与类之间的联接。一个类依赖于另外一个类的定义。如,一我的(Person)能够买车(Car)和房子(House),Person类依赖于Car和House的定义,由于Person引入了Car和House。与关联不一样的是,Person类中没有Car和House的属性,Car和House的实例是以参量的方式传入到buy()方法中的。通常而言,依赖关系在Java语言中体现为局部变量,方法形参,或者对静态方法的调用。函数

2)关联
关联是类与类之间的联接,使一个类知道另外一个类的属性和方法。关联能够是双向,也能够是单向的。通常使用成员变量来实现。this

3)聚合
聚合是一种强的关联关系。是总体和个体之间的关系。例如,汽车类与引擎类,轮胎类之间的关系就是总体与个体之间的关系。与关联关系同样,聚合关系也是经过实例变量实现的。可是关联关系涉及的两个类在同一层次,而聚合关系中两个类处在不平等的层次上,一个表明总体,一个表明部分。spa

4)组合
组合也是关联关系的一种,一种比聚合关系强的关系。组合关系中的部分类不能独立于总体类存在。总体类和部分类有相同的生命周期。如Person类和Leg类。code

5)继承/泛化
泛化和继承实际上是一个逆过程 泛化就是有子类抽象出一个父类 而继承就是由父类具体化一个子类 例如足球比联赛跟什么西甲 意甲 英超之间就是泛化/继承的关系blog

6)组合和聚合的区别
组合和聚合都属于关联,因此它们之间不免有类似之处,区别举例来讲明:
程老师的《大话》里举大那个大雁的例子很贴切 在此我就借用一下 大雁喜欢热闹惧怕孤独 因此它们一直过着群居的生活 这样就有了雁群 每一只大雁都有本身的雁群 每一个雁群都有好多大雁 大雁与雁群的这种关系就能够称之为聚合 另外每只大雁都有两只翅膀 大雁与雁翅的关系就叫作组合 有此可见 聚合的关系明显没有组合紧密 大雁不会由于它们的群主将雁群解散而没法生存 而雁翅就没法脱离大雁而单独生存——组合关系的类具备相同的生命周期
聚合关系图:继承

聚合关系图:生命周期

雁群类:class

public class GooseGroup
{
    publi Goose goose;
    public GooseGroup(Goose goose){
        this.goose=goose;
    }
}

大雁类:变量

public class Goose{
    public Wings wings;
    public Goose()
    {
        wings=new Wings();
    }
}    

从构造函数来看,GooseGroup的构造函数要用到Goose做为参数把值传进来,Goose能够脱离GooseGroup独立存在。
组合关系中总体类含有部分类的实例化,Goose在实例化以前,必定要先实例化Wings,两个类紧密耦合在一块儿,它们有相同的生命周期,Wings不能独立于Goose存在。构造函数

从信息封装来看,聚合关系中,客户端同时了解GooseGroup和Goose,由于它们是独立的。而在组合关系中,客户端只认识大雁类,根本不知道翅膀类的存在,由于翅膀类被严密封装在大雁类中。

相关文章
相关标签/搜索