|
|
@@ -0,0 +1,135 @@
|
|
|
+# 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()` + 方法重写 | ⭐⭐ |
|