面向对象编程·继承与多态

AAI脑图#8199572025-10-09 11:30
13200

内容详情

继承机制

is-a 关系

  • 实现方式
    • extends 关键字
      • 子类 ← 父类
        • 例:
  • 访问规则
    • 成员继承
      • public & protected 成员直接可用
    • 构造链
      • 无参构造:隐式调用 super()
      • 带参构造:需显式

类层次结构

  • 设计示例
    • Person → Employee → FullTimeEmp / PartTimeEmp
      • 共性抽取:name、phone
      • 特性扩展:salary、rate
  • 代码演示
    • EmployeeTest
      • 多态创建 & 输出

final 限制

  • 类层面
    • final class:禁止被继承
      • 例:
  • 方法层面
    • final method:禁止被覆写

适用判断

  • 设计原则
    • “每 B 都是 A?”
      • 否 → 用组合/聚合,而非继承

抽象类

核心定义

  • abstract 关键字
    • 仅用于被继承,禁止实例化

抽象方法

  • 语法
    • 无方法体,以分号结束
      • 例:
  • 约束
    • 子类必须实现全部抽象方法,除非子类也是抽象类

实战示例

  • Shape 抽象类
    • 抽象方法:area()、perimeter()
    • 具体方法:put() → 统一输出格式
  • 具体子类
    • Rectangle、Triangle
      • 分别实现面积与周长算法
  • 测试类
    • AbstractDemo
      • 向上转型:

接口与多继承

接口本质

  • 契约集合
    • 仅含抽象方法、常量、default/static 方法
      • 字段隐式:
      • 方法隐式:
  • 多实现
    • 单继承 + 多接口 → 解决多继承问题
      • 例:

定义与实现

  • 接口示例
    • Tax、PRSI
      • 常量:aRate、bRate、lRate、hRate
      • 抽象方法:calculateTax(pay)、calculatePRSI(pay)
  • 实现类
    • FullTimeEmp / PartTimeEmp
      • 覆写计算逻辑 → 不同税率策略

使用场景

  • 解耦协作
    • 团队间按接口“契约”独立开发
      • 调用方仅依赖接口,不依赖具体实现

多态

概念

  • 同一引用,多种形态
    • 父类/接口变量可指向任意子类实例

技术前提

  • 向上转型
    • 自动类型转换
      • Shape s = new Rectangle(...)
  • 动态绑定
    • 运行时确定实际方法版本

代码体现

  • 抽象类多态
    • AbstractDemo
      • → 实际执行 Rectangle.put()
  • 接口多态
    • List 示例
      • /