面向对象编程·继承与多态
13200
画布
|大纲
内容详情
继承机制
is-a 关系
- 实现方式
- extends 关键字
- 子类 ← 父类
- 例:
- 子类 ← 父类
- extends 关键字
- 访问规则
- 成员继承
- public & protected 成员直接可用
- 构造链
- 无参构造:隐式调用 super()
- 带参构造:需显式
- 成员继承
类层次结构
- 设计示例
- Person → Employee → FullTimeEmp / PartTimeEmp
- 共性抽取:name、phone
- 特性扩展:salary、rate
- Person → Employee → FullTimeEmp / PartTimeEmp
- 代码演示
- EmployeeTest
- 多态创建 & 输出
- EmployeeTest
final 限制
- 类层面
- final class:禁止被继承
- 例:
- final class:禁止被继承
- 方法层面
- final method:禁止被覆写
适用判断
- 设计原则
- “每 B 都是 A?”
- 否 → 用组合/聚合,而非继承
- “每 B 都是 A?”
抽象类
核心定义
- abstract 关键字
- 仅用于被继承,禁止实例化
抽象方法
- 语法
- 无方法体,以分号结束
- 例:
- 无方法体,以分号结束
- 约束
- 子类必须实现全部抽象方法,除非子类也是抽象类
实战示例
- Shape 抽象类
- 抽象方法:area()、perimeter()
- 具体方法:put() → 统一输出格式
- 具体子类
- Rectangle、Triangle
- 分别实现面积与周长算法
- Rectangle、Triangle
- 测试类
- AbstractDemo
- 向上转型:
- AbstractDemo
接口与多继承
接口本质
- 契约集合
- 仅含抽象方法、常量、default/static 方法
- 字段隐式:
- 方法隐式:
- 仅含抽象方法、常量、default/static 方法
- 多实现
- 单继承 + 多接口 → 解决多继承问题
- 例:
- 单继承 + 多接口 → 解决多继承问题
定义与实现
- 接口示例
- Tax、PRSI
- 常量:aRate、bRate、lRate、hRate
- 抽象方法:calculateTax(pay)、calculatePRSI(pay)
- Tax、PRSI
- 实现类
- FullTimeEmp / PartTimeEmp
- 覆写计算逻辑 → 不同税率策略
- FullTimeEmp / PartTimeEmp
使用场景
- 解耦协作
- 团队间按接口“契约”独立开发
- 调用方仅依赖接口,不依赖具体实现
- 团队间按接口“契约”独立开发
多态
概念
- 同一引用,多种形态
- 父类/接口变量可指向任意子类实例
技术前提
- 向上转型
- 自动类型转换
- Shape s = new Rectangle(...)
- 自动类型转换
- 动态绑定
- 运行时确定实际方法版本
代码体现
- 抽象类多态
- AbstractDemo
- → 实际执行 Rectangle.put()
- AbstractDemo
- 接口多态
- List 示例
- /
- List 示例
