Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 3 周:继承 / 多态 / 抽象类 / 接口

本周目标

本周开始写出“像 Java 项目”的代码。完成后,应能够:

  • 使用继承抽取公共属性和行为,减少重复代码
  • 使用方法重写和 super 扩展父类行为
  • 使用多态编写可扩展的调用代码
  • 使用抽象类定义模板结构
  • 使用接口定义能力约定,并说明接口与抽象类的区别
  • 为学生信息管理系统设计出可扩展的领域模型

学习资料与范围

视频范围学习模块学习结果
P96-P103继承、extends、访问权限和继承的特点能够使用继承抽取公共成员
P104-P110方法重写、super、构造方法调用顺序能够在子类中扩展父类行为
P111-P118多态、成员访问特点、类型转换和 instanceof能够使用父类引用操作子类对象
P119-P124抽象类、抽象方法和模板设计能够使用抽象类约束子类实现
P125-P130接口、接口多实现、接口与抽象类对比能够使用接口定义行为约定

分 P 范围为参考区间,实际以课程章节标题为准。

需要掌握的知识点

继承

  • extends 的语法和使用场景
  • 父类成员的可继承范围与访问权限的关系
  • Java 单继承的特点
  • 继承层次中构造方法的执行顺序
  • super 访问父类成员和父类构造方法
  • @Override 注解的作用和编译期检查价值
  • 方法重写的规则:名称、参数、返回值和访问权限
  • 什么时候应该使用组合而不是继承

多态

  • 父类引用指向子类对象的写法
  • 多态下成员变量、成员方法和静态方法的访问特点
  • 编译看左、运行看右的实际含义
  • 向上转型和向下转型
  • instanceof 判断和转型前的类型检查
  • 使用多态改造条件判断,把 if...else if 分支替换为对象多态
  • 多态带来的可扩展性:新增子类不需要修改调用方代码

抽象类

  • abstract 修饰类和方法的语法
  • 抽象类不能被实例化的原因
  • 抽象类可以包含构造方法、成员变量和普通方法
  • 子类必须实现全部抽象方法,否则子类也需要声明为抽象类
  • 使用抽象类定义模板方法,固定流程、变化步骤交给子类

接口

  • interface 定义和 implements 实现
  • 接口中的常量、抽象方法、默认方法和静态方法
  • 一个类可以实现多个接口
  • 接口继承接口
  • 接口与抽象类的区别和使用场景
  • 面向接口编程:先定义契约,再提供实现

设计能力

  • 从需求中识别公共属性和公共行为
  • 识别“是什么”(继承)和“能做什么”(接口)的差别
  • 使用 equals、toString 的替代方案(重写 toString 便于调试输出)
  • 类的职责划分:实体类、管理类、工具类各司其职

必做练习

  1. 继承入门:定义 Person 父类和 Student、Teacher 子类,把姓名、年龄等公共成员上移。
  2. 访问权限:把父类字段分别设置为 private、默认、protected、public,记录子类能否直接访问。
  3. 构造顺序:在父类和子类构造方法中分别输出提示,观察创建子类对象时的执行顺序。
  4. 方法重写:在 Student 中重写 introduce(),先调用 super.introduce() 再追加自己的内容。
  5. 多态调用:使用 Person 数组保存 Student 和 Teacher 对象,循环调用 introduce() 并观察结果。
  6. 类型转换:对 Person 引用使用 instanceof 判断,再向下转型调用子类特有方法;记录不判断就转型的报错。
  7. 多态改造:把一个用 switch 区分角色计算结果的代码,改写成父类引用加方法重写的形式。
  8. 抽象类:定义抽象类 Shape,包含抽象方法 area(),分别实现圆、矩形和三角形子类。
  9. 接口实现:定义接口 Manageable,包含增删改查方法声明,由 StudentManager 实现并输出模拟结果。
  10. 接口与抽象类对比:用表格列出两者的语法差异、继承限制和典型使用场景,并各举一个项目中的例子。

本周综合任务:设计学生信息管理系统的领域模型

为后续项目搭建类结构,本周只完成模型设计和模拟实现,不接入集合、IO 和框架机制。

要求:

  • 定义抽象类 Person,包含姓名、性别、年龄等公共属性,以及抽象方法 getRole()
  • 定义 Student 和 Admin 两个子类,分别扩展学号、班级和权限等级等特有属性
  • 重写 toString(),让对象可以直接打印成可读内容
  • 定义接口 Manageable,约定新增、删除、修改、查询和列表五类操作
  • 定义 StudentManager 实现该接口,底层先用对象数组保存数据
  • 使用多态保存和遍历不同角色的对象
  • 在 main 方法中准备测试数据,验证多态调用、类型转换和接口方法
  • 每个类添加类注释,说明类的职责

本周产出

  • 继承、重写、多态和类型转换练习代码
  • 抽象类与接口练习代码
  • 学生信息管理系统的领域模型(Person、Student、Admin、Manageable、StudentManager)
  • 一份类图或结构图,说明类之间的关系
  • 一份多态、抽象类和接口的选择依据笔记

完成检查

  • 能够使用继承抽取公共属性和方法
  • 能够正确重写方法并使用 super 扩展父类行为
  • 能够说明子类构造方法的执行顺序
  • 能够使用父类引用指向子类对象并完成多态调用
  • 能够使用 instanceof 判断类型并安全完成向下转型
  • 能够定义抽象类并约束子类实现
  • 能够定义接口并由多个类实现
  • 能够说明接口与抽象类的区别和选择依据
  • 已完成系统的领域模型,类职责划分清晰