现在,应该了解了类是更高级的,是具体对象的抽象。
思考时,应将具体对象的属性和方法抽离找到对应的名称来组成类。
那么在面向对象中,类与类有怎样的关系呢?
需要的前置知识点:类的结构:属性、方法、构造方法、参数。接口和继承。
继承/泛化关系(is a =是一个)
丰田卡罗拉类继承汽车类,我们说丰田卡罗拉是一个汽车。
苹果类继承水果类,我们说苹果是一个水果。
入库单类继承库存单据类,我们说入库单是一个库存单据。
在程序中:继承的子类会自动携带父类的属性和方法。也可以扩展和修改父类的方法(特殊情况可以先不考虑比如父类可以设置子类无法重写某些方法)。
实现关系
一个类实现了一个或多个接口。
我们说这个类和接口之间是一个实现关系。
关联关系(has a =有一个 或 has some = 有多个)
关联关系的要点是处在关联关系中的两个对象间不是部分和整体的关系。比如计算机和CPU,这不是关联关系,这是聚合关系。再比如公司和部门,这不是关联关系,也不是聚合关系,而是组合关系。
一个学生有一个学生证,一个学生证有一个学生
一个供应商有多个产品,一个产品有一个供应商。
一个学生有多门课程,一门课程有多个学生。
在程序中:关联关系指一个类中的属性(类中的全局变量)为另一个类或另一个类的集合。
关系为1对1、1对多(多对1)、多对多。
聚合关系
聚合在程序中和关联关系一样,也是作为类的全局变量存在。
所以也可以把聚合关系视作一种关联关系。
聚合对象的定义是:部分和整体的关系,但是整体消失部分可以独立存在(这个独立存在是指概念上的)。例如计算机和CPU(思维不要太发散,不要去想计算机掉岩浆里了之类的)。
在程序中:
一般将聚合关系表示为整体类的构造参数传入部分。整体对象销毁后,部分还继续存在。
组合关系
组合在程序中和关联关系一样,也是作为类的全局变量存在。
所以也可以把组合关系视作一种关联关系。
组合对象的定义是:部分和整体的关系,整体消失部分也消失。例如公司和部门。
在程序中:
一般将组合关系表示为整体类的构造方法中创建部分的对象。整体对象销毁后,部分也被销毁。
依赖关系
依赖关系是一种使用关系。例如人驾驶汽车。(这个思维也不要太发散,不要去想人也可以拥有汽车,因为最终我们描述的是代码上的结构而非对现实中事物的多角度解读。)
依赖关系有如下三种情况:
1、A类是B类中的(某中方法的)局部变量;
2、A类是B类方法当中的一个参数;
3、A类向B类发送消息,从而影响B类发生变化;(事件)