三大特性: 封装、继承、多态。
封装
优点:
字面意思就是把代码封装起来抽象化,提高代码的安全性、封装的东西可以重复使用、减少代码冗余、封装也可以做到一个模块抽象化、维护方便、调节便捷,直接对应模块修改即可。
封装可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。就可以对成员变量进行更精确的控制。
继承
继承实现了 子类-父类的关系 例如猫和狗 子类继承父类 子类可以使用父类非私有的属性和方法。
继承应该遵循里氏替换原则,子类对象必须能够替换掉所有父类对象、子类可以扩展父类的功能,但不能改变父类原有的功能
父类引用指向子类对象称为 向上转型
子类可以继承父类,但父类不能继承子类
多态
多态分为编译时多态和运行时多态:
编译时多态主要指方法的重载
运行时多态指程序中定义的对象引用所指向的具体类型在运行期间才确定
运行时多态有三个条件:
继承
覆盖(重写)
向上转型
类图
泛化关系
用来描述继承关系,在 Java 中使用 extends 关键字
实现关系
用来实现一个接口,在 Java 中使用 implements 关键字
聚合关系 (Aggregation)
表示整体由部分组成,但是整体和部分不是强依赖的,整体不存在了部分还是会存在。
组合关系 (Composition)
和聚合不同,组合中整体和部分是强依赖的,整体不存在了部分也不存在了。比如公司和部门,公司没了部门就不存在了。但是公司和员工就属于聚合关系了,因为公司没了员工还在。
关联关系 (Association)
表示不同类对象之间有关联,这是一种静态关系,与运行过程的状态无关,在最开始就可以确定。因此也可以用 1 对 1、多对 1、多对多这种关联关系来表示。比如学生和学校就是一种关联关系,一个学校可以有很多学生,但是一个学生只属于一个学校,因此这是一种多对一的关系,在运行开始之前就可以确定。
依赖关系 (Dependency)
和关联关系不同的是,依赖关系是在运行过程中起作用的。A 类和 B 类是依赖关系主要有三种形式:
- A 类是 B 类中的(某中方法的)局部变量;
- A 类是 B 类方法当中的一个参数;
- A 类向 B 类发送消息,从而影响 B 类发生变化;
著作权归@pdai所有 原文链接:https://pdai.tech/md/java/basic/java-basic-oop.html