|
|
@@ -1,8 +1,8 @@
|
|
|
# 2026-07-23 抽象类(Abstract)基础练习(课堂练习用)
|
|
|
|
|
|
-> **说明**:以下习题围绕今日授课核心内容——**抽象类(abstract)** 展开,涵盖抽象类的定义、特点、抽象方法的重写以及抽象类与对象数组/排序的综合应用。
|
|
|
+> **说明**:以下习题围绕今日授课核心内容——**抽象类(abstract)** 和 **接口(Interface)** 展开,涵盖抽象类的定义、特点、抽象方法的重写、抽象类与对象数组/排序的综合应用,以及接口的定义、实现、多实现等入门知识。
|
|
|
>
|
|
|
-> 题目分为三部分:**随堂练习**(抽象类入门,4 题)、**进阶练习**(综合挑战,2 题)和 **课外拓展**(1 题)。
|
|
|
+> 题目分为四部分:**随堂练习**(抽象类入门,4 题)、**进阶练习**(综合挑战,2 题)、**课外拓展**(1 题)和 **接口入门练习**(3 题)。
|
|
|
|
|
|
---
|
|
|
|
|
|
@@ -406,14 +406,165 @@ Java 考试评分:检查代码正确性,选择题自动判分...
|
|
|
|
|
|
---
|
|
|
|
|
|
+# 第四部分:接口入门练习
|
|
|
+
|
|
|
+> 以下练习围绕 **接口(Interface)** 的基础概念和用法,由浅入深。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 练习 5:接口入门——Playable 播放器接口
|
|
|
+
|
|
|
+**难度**:⭐
|
|
|
+**知识点**:接口定义、接口方法、implements 实现接口
|
|
|
+
|
|
|
+创建一个播放器接口体系:
|
|
|
+
|
|
|
+**`Playable` 接口**:
|
|
|
+- **抽象方法**:`void play()` —— 播放
|
|
|
+- **抽象方法**:`void pause()` —— 暂停
|
|
|
+- **抽象方法**:`void stop()` —— 停止
|
|
|
+
|
|
|
+**`MP3Player` 类**(实现 Playable):
|
|
|
+- **私有属性**:`songName`(歌曲名,String)
|
|
|
+- **构造方法**:`MP3Player(String songName)`
|
|
|
+- **实现** `play()` —— 输出 `"正在播放:xxx"`
|
|
|
+- **实现** `pause()` —— 输出 `"暂停播放:xxx"`
|
|
|
+- **实现** `stop()` —— 输出 `"停止播放:xxx"`
|
|
|
+
|
|
|
+**`VideoPlayer` 类**(实现 Playable):
|
|
|
+- **私有属性**:`movieName`(电影名,String)
|
|
|
+- **构造方法**:`VideoPlayer(String movieName)`
|
|
|
+- **实现** `play()` —— 输出 `"正在播放视频:xxx"`
|
|
|
+- **实现** `pause()` —— 输出 `"暂停播放视频:xxx"`
|
|
|
+- **实现** `stop()` —— 输出 `"停止播放视频:xxx"`
|
|
|
+
|
|
|
+**测试类要求**:
|
|
|
+1. 创建 `MP3Player` 对象("青花瓷"),依次调用 `play()`、`pause()`、`stop()`
|
|
|
+2. 创建 `VideoPlayer` 对象("哪吒"),依次调用 `play()`、`pause()`、`stop()`
|
|
|
+3. 思考:`Playable` 接口中三个方法的默认修饰符是什么?
|
|
|
+
|
|
|
+**预期输出**:
|
|
|
+```
|
|
|
+正在播放:青花瓷
|
|
|
+暂停播放:青花瓷
|
|
|
+停止播放:青花瓷
|
|
|
+正在播放视频:哪吒
|
|
|
+暂停播放视频:哪吒
|
|
|
+停止播放视频:哪吒
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 练习 6:USB 充电器接口——Charger 充电规范 ⭐(配合课堂代码)
|
|
|
+
|
|
|
+**难度**:⭐⭐
|
|
|
+**知识点**:接口定义、implements 实现、类继承父类的同时实现接口
|
|
|
+
|
|
|
+参照课堂上的 USB 接口标准示例,创建一个充电器接口体系:
|
|
|
+
|
|
|
+**`Charger` 接口**:
|
|
|
+- **抽象方法**:`void connect()` —— 连接设备
|
|
|
+- **抽象方法**:`void charging()` —— 正在充电
|
|
|
+- **抽象方法**:`void disconnect()` —— 断开连接
|
|
|
+
|
|
|
+**`Device` 类**(父类):
|
|
|
+- **私有属性**:`brand`(品牌,String)、`model`(型号,String)
|
|
|
+- **构造方法**:`Device(String brand, String model)`
|
|
|
+- **getter/setter**
|
|
|
+- **普通方法**:`showInfo()` —— 输出 `"设备:xxx 品牌:xxx"`
|
|
|
+
|
|
|
+**`Phone` 类**(继承 Device 并实现 Charger):
|
|
|
+- **新增私有属性**:`batteryCapacity`(电池容量,int,单位 mAh)
|
|
|
+- **构造方法**:`Phone(String brand, String model, int batteryCapacity)`
|
|
|
+- **实现** `connect()` —— 输出 `"手机已连接充电器"`
|
|
|
+- **实现** `charging()` —— 输出 `"手机正在充电,电池容量:xxx mAh"`
|
|
|
+- **实现** `disconnect()` —— 输出 `"手机已断开充电器"`
|
|
|
+
|
|
|
+**`Laptop` 类**(继承 Device 并实现 Charger):
|
|
|
+- **新增私有属性**:`power`(功率,int,单位 W)
|
|
|
+- **构造方法**:`Laptop(String brand, String model, int power)`
|
|
|
+- **实现** `connect()` —— 输出 `"笔记本电脑已连接电源"`
|
|
|
+- **实现** `charging()` —— 输出 `"笔记本电脑正在充电,功率:xxx W"`
|
|
|
+- **实现** `disconnect()` —— 输出 `"笔记本电脑已断开电源"`
|
|
|
+
|
|
|
+**测试类要求**:
|
|
|
+1. 创建 `Phone` 对象("华为", "Mate60", 5000),调用 `showInfo()`,然后依次调用充电三步骤
|
|
|
+2. 创建 `Laptop` 对象("联想", "ThinkPad", 65),调用 `showInfo()`,然后依次调用充电三步骤
|
|
|
+
|
|
|
+**预期输出**:
|
|
|
+```
|
|
|
+设备:Mate60 品牌:华为
|
|
|
+手机已连接充电器
|
|
|
+手机正在充电,电池容量:5000 mAh
|
|
|
+手机已断开充电器
|
|
|
+设备:ThinkPad 品牌:联想
|
|
|
+笔记本电脑已连接电源
|
|
|
+笔记本电脑正在充电,功率:65 W
|
|
|
+笔记本电脑已断开电源
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 练习 7:接口多实现——多功能设备
|
|
|
+
|
|
|
+**难度**:⭐⭐⭐
|
|
|
+**知识点**:一个类实现多个接口、接口的扩展性
|
|
|
+
|
|
|
+创建一个多功能设备,同时实现 **拍照** 和 **播放** 两个接口。
|
|
|
+
|
|
|
+**`Camera` 接口**:
|
|
|
+- **抽象方法**:`void takePhoto()` —— 拍照
|
|
|
+- **抽象方法**:`void recordVideo()` —— 录像
|
|
|
+
|
|
|
+**`Playable` 接口**(复用练习 5 的定义):
|
|
|
+- **抽象方法**:`void play()` —— 播放
|
|
|
+- **抽象方法**:`void pause()` —— 暂停
|
|
|
+- **抽象方法**:`void stop()` —— 停止
|
|
|
+
|
|
|
+**`SmartPhone` 类**(实现 Camera 和 Playable 两个接口):
|
|
|
+- **私有属性**:`brand`(品牌,String)、`model`(型号,String)
|
|
|
+- **构造方法**:`SmartPhone(String brand, String model)`
|
|
|
+- **实现** `takePhoto()` —— 输出 `"xxx xxx 拍照:咔嚓!"`
|
|
|
+- **实现** `recordVideo()` —— 输出 `"xxx xxx 录像:开始录制视频..."`
|
|
|
+- **实现** `play()` —— 输出 `"xxx xxx 播放音乐"`
|
|
|
+- **实现** `pause()` —— 输出 `"xxx xxx 暂停播放"`
|
|
|
+- **实现** `stop()` —— 输出 `"xxx xxx 停止播放"`
|
|
|
+
|
|
|
+> 注意:`xxx xxx` 部分使用品牌和型号拼接,如 `"苹果 iPhone15"`。
|
|
|
+
|
|
|
+**测试类要求**:
|
|
|
+1. 创建 `SmartPhone` 对象("苹果", "iPhone15")
|
|
|
+2. 调用拍照功能:`takePhoto()`、`recordVideo()`
|
|
|
+3. 调用播放功能:`play()`、`pause()`、`stop()`
|
|
|
+4. 观察:**一个类实现了两个接口,同时拥有了拍照能力和播放能力**——这就是接口做功能拓展的优势
|
|
|
+
|
|
|
+**思考题**:
|
|
|
+1. 如果使用抽象类来实现同样的功能,你会怎么设计?能避免「单继承」的限制吗?
|
|
|
+2. 接口中的方法默认使用什么修饰符?可以省略不写吗?
|
|
|
+3. 接口中的变量默认使用什么修饰符?可以修改接口中变量的值吗?
|
|
|
+
|
|
|
+**预期输出**:
|
|
|
+```
|
|
|
+苹果 iPhone15 拍照:咔嚓!
|
|
|
+苹果 iPhone15 录像:开始录制视频...
|
|
|
+苹果 iPhone15 播放音乐
|
|
|
+苹果 iPhone15 暂停播放
|
|
|
+苹果 iPhone15 停止播放
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
## 📋 题目总览
|
|
|
|
|
|
| 序号 | 所属部分 | 核心知识点 | 难度 |
|
|
|
|------|---------|-----------|------|
|
|
|
| 练习 1 | 随堂 | 抽象类定义、抽象方法、子类重写抽象方法 | ⭐ |
|
|
|
-| 练习 2 | 随堂 | **抽象类:计算周长 + 计算面积**、方法重写、super() 调用父类构造方法 | ⭐⭐ |
|
|
|
+| 练习 2 | 随堂 | 抽象类:计算周长 + 计算面积、方法重写、super() 调用父类构造方法 | ⭐⭐ |
|
|
|
| 练习 3 | 随堂 | 抽象类 + 构造方法 + super()、抽象方法重写 | ⭐⭐ |
|
|
|
| 练习 4 | 随堂 | 抽象类设计思想、判断何时使用抽象类 | ⭐⭐ |
|
|
|
| 进阶 1 | 进阶 | 抽象类 + 对象数组 + 冒泡排序 + 多态 | ⭐⭐⭐⭐ |
|
|
|
| 进阶 2 | 进阶 | 抽象类 + 多态 + 继承 + 综合应用 | ⭐⭐⭐⭐⭐ |
|
|
|
| 拓展 3 | 课外 | 模板方法设计模式(抽象类经典应用) | ⭐⭐⭐⭐⭐ |
|
|
|
+| 练习 5 | 接口入门 | 接口定义、接口方法、implements 实现接口 | ⭐ |
|
|
|
+| 练习 6 | 接口入门 | 接口实现、类继承父类同时实现接口(Charger 充电规范) | ⭐⭐ |
|
|
|
+| 练习 7 | 接口入门 | 一个类实现多个接口、接口做功能拓展 | ⭐⭐⭐ |
|