# 2026-07-22 JavaSE 课后作业 > **课程内容**:继承(extends)—— 继承的概念与格式、方法重写(Override)、super 关键字、同名属性处理、变量就近原则、构造方法继承特点 > > **涉及前序知识**:封装、构造方法、getter/setter、对象创建 > > **提交方式**:在 `提交\姓名\` 目录下创建对应的 Java 源文件 > > **截止时间**:下次上课前 --- ## 📌 本次作业重要说明 ### 命名要求 | 项目 | 要求 | |------|------| | **包名** | **必须按题目指定的包名创建**(全小写) | | **类名** | 自由命名,但需**见名知意**(如实体类用 `Appliance`、`TV` 等均可) | | **测试类** | 建议命名为 `TestXxx` 或 `XxxTest` | | **文件名** | 必须与类名一致 | ### 提交目录结构示例 ``` 提交\ └─ 张三\ ├─ p10_appliance\ ← 第 1 题的包 │ ├─ Appliance.java ← 实体类(父类) │ ├─ TV.java ← 实体类(子类) │ ├─ WashingMachine.java ← 实体类(子类) │ └─ TestAppliance.java ← 测试类 └─ p11_employee\ ← 第 2 题的包 ├─ Employee.java ← 实体类(父类) ├─ Teacher.java ← 实体类(子类) ├─ Doctor.java ← 实体类(子类) └─ TestEmployee.java ← 测试类 ``` > ⚠ **注意**:包名必须严格按题目要求书写(全小写),目录结构必须与包结构一致。 --- ## 第 1 题:继承入门——Appliance 电器体系 ⭐ **包名**:`p10_appliance` **知识点**:继承的格式、子类调用父类方法 创建一个简单的电器继承体系: ### Appliance 类(父类) - **方法**:`powerOn()` —— 输出 `"电器已开机"` - **方法**:`powerOff()` —— 输出 `"电器已关机"` ### TV 类(子类,继承 Appliance) - **方法**:`changeChannel()` —— 输出 `"电视切换频道"` ### WashingMachine 类(子类,继承 Appliance) - **方法**:`startWash()` —— 输出 `"洗衣机开始洗衣服"` ### 测试类要求(测试类类名自拟,置于 `p10_appliance` 包下) 1. 创建 `TV` 对象,依次调用 `powerOn()`、`changeChannel()`、`powerOff()` 方法 2. 创建 `WashingMachine` 对象,依次调用 `powerOn()`、`startWash()`、`powerOff()` 方法 3. 观察子类是否可以直接使用父类的方法 ### 预期输出 ``` 电器已开机 电视切换频道 电器已关机 电器已开机 洗衣机开始洗衣服 电器已关机 ``` > 💡 **提示**:子类不需要定义 `powerOn()` 和 `powerOff()` 方法,直接继承自父类即可使用。 --- ## 第 2 题:继承 + 构造方法 + 方法重写——Employee 员工体系 ⭐⭐ **包名**:`p11_employee` **知识点**:继承 + 构造方法(含 `super()` 调用)+ 方法重写(Override) 创建员工继承体系: ### Employee 类(父类) - **私有属性**:`id`(工号,int)、`name`(姓名,String)、`salary`(薪资,double) - **全参构造方法**:`Employee(int id, String name, double salary)` - **getter/setter** - **方法**:`work()` —— 输出 `"员工在工作"` ### Teacher 类(继承 Employee) - **新增私有属性**:`subject`(教授科目,String) - **全参构造方法**:`Teacher(int id, String name, double salary, String subject)` - 使用 `super(id, name, salary)` 调用父类构造方法 - **getter/setter** - **重写** `work()` —— 输出 `"工号为xxx的xxx老师正在教授xxx课程"` ### Doctor 类(继承 Employee) - **新增私有属性**:`specialty`(专长科室,String) - **全参构造方法**:`Doctor(int id, String name, double salary, String specialty)` - 使用 `super(id, name, salary)` 调用父类构造方法 - **getter/setter** - **重写** `work()` —— 输出 `"工号为xxx的xxx医生正在xxx科室坐诊"` ### 测试类要求(测试类类名自拟,置于 `p11_employee` 包下) 1. 创建 `Employee` 对象,调用 `work()` 方法 2. 创建 `Teacher` 对象(如:工号 1001,姓名"张老师",薪资 8000,科目"Java编程"),调用 `work()` 方法 3. 创建 `Doctor` 对象(如:工号 2001,姓名"李医生",薪资 12000,科室"内科"),调用 `work()` 方法 4. 观察:相同的 `work()` 方法名,在不同的子类中有不同的输出——这就是 **方法重写(Override)** ### 示例输出 ``` 员工在工作 工号为1001的张老师正在教授Java编程课程 工号为2001的李医生正在内科科室坐诊 ``` > 💡 **提示**: > - 子类构造方法中必须使用 `super(参数)` 调用父类的有参构造方法 > - 方法重写时,方法签名(方法名 + 参数列表)必须与父类完全一致 > - 可以通过 `getId()`、`getName()` 获取父类私有属性值 --- ## 📋 题目总览 | 序号 | 包名 | 核心知识点 | 难度 | |------|------|-----------|------| | 第 1 题 | `p10_appliance` | 继承格式、子类调用父类方法 | ⭐ | | 第 2 题 | `p11_employee` | 继承 + 构造方法 + `super()` + 方法重写 | ⭐⭐ |