三大特性
封装
隐藏对象的属性和实现细节,仅对外公开接口,控制程序中属性的读和修改的访问级别,封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只要通过外部接口,以特定的访问权限来使用类的成员。更加快捷、高效、提高可重入性。
继承
子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法。继承应该遵循里氏替换原则,子类对象必须能够替换掉所有父类对象。父类引用指向子类对象称为 向上转型。
多态
多态分为编译时多态和运行时多态:
- 编译时多态主要指方法的重载——在编译期通过参数的数量和类型,来确定调用的方法
- 运行时多态指程序中定义的对象引用所指向的具体类型在运行期间才确定
运行时多态有三个条件:
- 继承
- 覆盖(重写)
- 向上转型
只有在运行时,通过引用的地址,来确定调用的方法到底是哪个类的。
类图
要求画ER图时,还是蛮重要的,下面的六种关系,可以理清类之间的关系哈。
泛化关系 (Generalization)
继承关系,在 Java 中使用 extends 关键字。
实现关系 (Realization)
实现一个接口,在 Java 中使用 implement 关键字。
聚合关系 (Aggregation)
表示整体由部分组成,但是整体和部分不是强依赖的,整体不存在了部分还是会存在。
和下面的组合对应,聚合的话不是强依赖,而组合是强依赖。
组合关系 (Composition)
和聚合不同,组合中整体和部分是强依赖的,整体不存在了部分也不存在了。比如公司和部门,公司没了部门就不存在了。但是公司和员工就属于聚合关系了,因为公司没了员工还在。
关联关系 (Association)
就是那种一对一、一对多、多对一、多对多的相关性关系
依赖关系 (Dependency)
和关联关系不同的是,依赖关系是在运行过程中起作用的。A 类和 B 类是依赖关系主要有三种形式:
与上面的关联形成对比,依赖是指,运行期间,B类依赖A类,即需要A类的工作
- A 类是 B 类中的(某中方法的)局部变量;
- A 类是 B 类方法当中的一个参数;
- A 类向 B 类发送消息,从而影响 B 类发生变化;