|
|
@@ -26,19 +26,13 @@
|
|
|
```
|
|
|
提交\
|
|
|
└─ 张三\
|
|
|
- ├─ p1_zoo\ ← 第 1 题的包
|
|
|
- │ ├─ Animal.java ← 抽象父类
|
|
|
- │ ├─ Lion.java ← 子类
|
|
|
- │ ├─ Penguin.java ← 子类
|
|
|
- │ ├─ Parrot.java ← 子类
|
|
|
- │ └─ ZooGuide.java ← 测试类(多态 + instanceof)
|
|
|
- ├─ p2_smarthome\ ← 第 2 题的包
|
|
|
+ ├─ p1_smarthome\ ← 第 1 题的包
|
|
|
│ ├─ SmartDevice.java ← 接口
|
|
|
- │ ├─ Light.java ← 实现类
|
|
|
- │ ├─ AirConditioner.java ← 实现类
|
|
|
- │ ├─ RobotVacuum.java ← 实现类
|
|
|
- │ └─ SmartHomeController.java ← 测试类
|
|
|
- └─ p3_computer\ ← 第 3 题的包
|
|
|
+ │ ├─ Light.java ← 实现类(特有:调色)
|
|
|
+ │ ├─ AirConditioner.java ← 实现类(特有:定时)
|
|
|
+ │ ├─ RobotVacuum.java ← 实现类(特有:清洁模式)
|
|
|
+ │ └─ SmartHomeController.java ← 测试类(多态 + instanceof + 向下转型)
|
|
|
+ └─ p2_computer\ ← 第 2 题的包
|
|
|
├─ Computer.java ← 外部类(含内部类)
|
|
|
└─ TestComputer.java ← 测试类
|
|
|
```
|
|
|
@@ -47,116 +41,141 @@
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 第 1 题:多态 + 转型 + instanceof——动物园导游系统 ⭐⭐⭐
|
|
|
+## 第 1 题:接口多态 + 转型 + instanceof——智能家居控制系统 ⭐⭐⭐
|
|
|
|
|
|
-**包名**:`p1_zoo`
|
|
|
+**包名**:`p1_smarthome`
|
|
|
|
|
|
-**知识点**:多态、向上转型/向下转型、instanceof 运算符、抽象类、调用子类特有方法
|
|
|
+**知识点**:接口定义与实现、接口多态(参数/数组)、向上转型、向下转型、instanceof 运算符、调用实现类特有方法、开闭原则
|
|
|
|
|
|
### 需求说明
|
|
|
|
|
|
-某动物园需要开发一个**导游讲解系统**。动物园里有多种动物,每种动物都有**共同的行为**(进食、睡觉),也有**各自的特有行为**(有的会吼叫、有的会游泳、有的会模仿说话)。导游需要根据不同动物类型进行不同的讲解。
|
|
|
+开发一个**智能家居控制系统**。不同家电的开关方式和运行逻辑不同,但都遵循统一的控制规范:**打开 → 运行 → 关闭**。此外,每种家电还有**各自的特有功能**(灯可以调色、空调可以定时、扫地机器人有不同清洁模式)。
|
|
|
|
|
|
-请使用 **抽象父类 + 多态 + instanceof + 向下转型** 来设计。
|
|
|
+请使用 **接口多态 + instanceof + 向下转型** 来设计,要求:
|
|
|
+- 控制器通过接口类型操作所有设备(多态)
|
|
|
+- 通过 `instanceof` 判断设备类型后向下转型,调用特有功能
|
|
|
|
|
|
-### 类设计
|
|
|
+### 接口设计
|
|
|
|
|
|
-#### Animal 抽象类(父类)
|
|
|
+#### SmartDevice 接口
|
|
|
|
|
|
-| 成员 | 说明 |
|
|
|
+| 方法 | 说明 |
|
|
|
|------|------|
|
|
|
-| 私有属性 | `name`(名称,String)、`age`(年龄,int) |
|
|
|
-| 构造方法 | `Animal(String name, int age)` |
|
|
|
-| 抽象方法 | `void eat()` |
|
|
|
-| 抽象方法 | `void sleep()` |
|
|
|
-| 普通方法 | `void showInfo()` —— 输出 `"动物:xxx,年龄:xxx岁"` |
|
|
|
+| `void turnOn()` | 打开设备 |
|
|
|
+| `void doWork()` | 执行工作 |
|
|
|
+| `void turnOff()` | 关闭设备 |
|
|
|
|
|
|
-#### Lion 类(狮子——继承 Animal)
|
|
|
+### 实现类要求
|
|
|
+
|
|
|
+#### Light 类(灯——实现 SmartDevice)
|
|
|
|
|
|
| 成员 | 说明 |
|
|
|
|------|------|
|
|
|
-| 构造方法 | `Lion(String name, int age)` |
|
|
|
-| 重写 `eat()` | 输出 `"狮子 xxx 正在吃肉..."` |
|
|
|
-| 重写 `sleep()` | 输出 `"狮子 xxx 在洞穴里睡觉..."` |
|
|
|
-| **特有** `roar()` | 输出 `"狮子 xxx 发出吼叫:嗷呜~~"` |
|
|
|
+| 私有属性 | `location`(位置,String,如 "客厅" / "卧室") |
|
|
|
+| 构造方法 | `Light(String location)` |
|
|
|
+| 实现 `turnOn()` | 输出 `"xxx 的灯已打开"` |
|
|
|
+| 实现 `doWork()` | 输出 `"xxx 的灯照明中..."` |
|
|
|
+| 实现 `turnOff()` | 输出 `"xxx 的灯已关闭"` |
|
|
|
+| **特有方法** | `void changeColor(String color)` —— 输出 `"xxx 的灯光变为 xxx 色"` |
|
|
|
|
|
|
-#### Penguin 类(企鹅——继承 Animal)
|
|
|
+#### AirConditioner 类(空调——实现 SmartDevice)
|
|
|
|
|
|
| 成员 | 说明 |
|
|
|
|------|------|
|
|
|
-| 构造方法 | `Penguin(String name, int age)` |
|
|
|
-| 重写 `eat()` | 输出 `"企鹅 xxx 正在吃鱼..."` |
|
|
|
-| 重写 `sleep()` | 输出 `"企鹅 xxx 站着睡觉..."` |
|
|
|
-| **特有** `swim()` | 输出 `"企鹅 xxx 在水中游泳..."` |
|
|
|
+| 私有属性 | `roomName`(房间名,String)、`temperature`(温度,int) |
|
|
|
+| 构造方法 | `AirConditioner(String roomName, int temperature)` |
|
|
|
+| 实现 `turnOn()` | 输出 `"xxx 空调已打开,设定温度:xxx℃"` |
|
|
|
+| 实现 `doWork()` | 输出 `"xxx 空调制冷中,当前室温正降至 xxx℃..."` |
|
|
|
+| 实现 `turnOff()` | 输出 `"xxx 空调已关闭"` |
|
|
|
+| **特有方法** | `void setTimer(int hours)` —— 输出 `"xxx 空调已设置 xxx 小时后自动关闭"` |
|
|
|
|
|
|
-#### Parrot 类(鹦鹉——继承 Animal)
|
|
|
+#### RobotVacuum 类(扫地机器人——实现 SmartDevice)
|
|
|
|
|
|
| 成员 | 说明 |
|
|
|
|------|------|
|
|
|
-| 私有属性 | `vocabulary`(词汇量,int) |
|
|
|
-| 构造方法 | `Parrot(String name, int age, int vocabulary)` |
|
|
|
-| 重写 `eat()` | 输出 `"鹦鹉 xxx 正在啄食谷物..."` |
|
|
|
-| 重写 `sleep()` | 输出 `"鹦鹉 xxx 挂在树枝上睡觉..."` |
|
|
|
-| **特有** `imitate()` | 输出 `"鹦鹉 xxx 模仿人类说话:你好!词汇量:xxx个"` |
|
|
|
+| 私有属性 | `model`(型号,String)、`batteryLevel`(电量,int,百分比) |
|
|
|
+| 构造方法 | `RobotVacuum(String model, int batteryLevel)` |
|
|
|
+| 实现 `turnOn()` | 输出 `"扫地机器人 xxx 已启动,当前电量:xxx%"` |
|
|
|
+| 实现 `doWork()` | 输出 `"扫地机器人 xxx 开始清扫地面..."` |
|
|
|
+| 实现 `turnOff()` | 输出 `"扫地机器人 xxx 已完成清扫,自动关闭"` |
|
|
|
+| **特有方法** | `void startCleaningMode(String mode)` —— 输出 `"扫地机器人 xxx 已切换到 xxx 模式开始清扫"`(mode 如 "强力" / "静音" / "边缘") |
|
|
|
|
|
|
### 测试类要求
|
|
|
|
|
|
-**`ZooGuide` 类**:
|
|
|
+**`SmartHomeController` 类**(测试类,含 main 方法):
|
|
|
|
|
|
-1. **创建动物数组**:`Animal[]` 数组,包含至少 4 种动物
|
|
|
+1. **创建设备数组**:创建一个 `SmartDevice[]` 数组,包含至少 5 个设备
|
|
|
|
|
|
```java
|
|
|
- Animal a1 = new Lion("辛巴", 5);
|
|
|
- Animal a2 = new Penguin("乐乐", 2);
|
|
|
- Animal a3 = new Parrot("小彩虹", 1, 50);
|
|
|
- Animal a4 = new Lion("娜娜", 4);
|
|
|
+ SmartDevice light1 = new Light("客厅");
|
|
|
+ SmartDevice ac = new AirConditioner("主卧", 26);
|
|
|
+ SmartDevice robot = new RobotVacuum("石头T10", 80);
|
|
|
+ SmartDevice light2 = new Light("书房");
|
|
|
+ SmartDevice ac2 = new AirConditioner("次卧", 24);
|
|
|
```
|
|
|
|
|
|
-2. **遍历执行通用行为**:调用每个元素的 `showInfo()`、`eat()`、`sleep()`
|
|
|
+2. **遍历数组,执行通用工作流程**:对每个设备依次调用 `turnOn()` → `doWork()` → `turnOff()`
|
|
|
+
|
|
|
+3. **遍历数组,执行特有功能**:使用 `instanceof` 判断设备类型后向下转型,调用特有方法:
|
|
|
+ - 如果是 `Light` → 向下转型 → 调用 `changeColor("暖黄")`
|
|
|
+ - 如果是 `AirConditioner` → 向下转型 → 调用 `setTimer(4)`(4 小时)
|
|
|
+ - 如果是 `RobotVacuum` → 向下转型 → 调用 `startCleaningMode("强力")`
|
|
|
|
|
|
-3. **遍历执行特有行为**:使用 `instanceof` 判断类型后向下转型
|
|
|
- - `Lion` → `roar()`
|
|
|
- - `Penguin` → `swim()`
|
|
|
- - `Parrot` → `imitate()`
|
|
|
+4. **编写静态方法 `startDevice(SmartDevice device, int seconds)`**:
|
|
|
+ - 调用 `device.turnOn()`
|
|
|
+ - 输出 `"设备工作中,请等待" + seconds + "秒..."`
|
|
|
+ - 调用 `device.doWork()`
|
|
|
+ - 使用 `instanceof` 判断类型后向下转型,调用特有方法(与第 3 步逻辑相同)
|
|
|
+ - 调用 `device.turnOff()`
|
|
|
+ - 在 `main` 中传入不同类型设备调用此方法
|
|
|
|
|
|
### 思考题
|
|
|
|
|
|
-1. 为什么 `Animal` 要设计为抽象类?用普通父类可以吗?
|
|
|
-2. 如果不用 `instanceof` 直接向下转型,传入 `Penguin` 时强转为 `(Lion)` 会怎样?
|
|
|
-3. 如果新增 `Elephant` 类,需要修改 `ZooGuide` 吗?这符合什么设计原则?
|
|
|
+1. 方法参数 `SmartDevice device` 能传入哪些类型的对象?调用 `device.changeColor()` 行吗?为什么?
|
|
|
+2. 如果新增一个 `SmartSpeaker`(智能音箱)实现 `SmartDevice`,`SmartHomeController` 需要修改哪些代码?是否符合"开闭原则"?
|
|
|
+3. 如果将 `SmartDevice` 改为抽象类而不是接口,设计上会有什么不同?还能实现"一个类实现多个规范"吗?
|
|
|
|
|
|
### 预期输出
|
|
|
|
|
|
```
|
|
|
-========== 动物园导游系统 ==========
|
|
|
-动物:辛巴,年龄:5岁
|
|
|
-狮子 辛巴 正在吃肉...
|
|
|
-狮子 辛巴 在洞穴里睡觉...
|
|
|
-狮子 辛巴 发出吼叫:嗷呜~~
|
|
|
-
|
|
|
-动物:乐乐,年龄:2岁
|
|
|
-企鹅 乐乐 正在吃鱼...
|
|
|
-企鹅 乐乐 站着睡觉...
|
|
|
-企鹅 乐乐 在水中游泳...
|
|
|
-
|
|
|
-动物:小彩虹,年龄:1岁
|
|
|
-鹦鹉 小彩虹 正在啄食谷物...
|
|
|
-鹦鹉 小彩虹 挂在树枝上睡觉...
|
|
|
-鹦鹉 小彩虹 模仿人类说话:你好!词汇量:50个
|
|
|
-
|
|
|
-动物:娜娜,年龄:4岁
|
|
|
-狮子 娜娜 正在吃肉...
|
|
|
-狮子 娜娜 在洞穴里睡觉...
|
|
|
-狮子 娜娜 发出吼叫:嗷呜~~
|
|
|
-```
|
|
|
+========== 智能家居启动 ==========
|
|
|
+客厅的灯已打开
|
|
|
+客厅的灯照明中...
|
|
|
+客厅的灯已关闭
|
|
|
+客厅的灯光变为暖黄色
|
|
|
|
|
|
----
|
|
|
+主卧空调已打开,设定温度:26℃
|
|
|
+主卧空调制冷中,当前室温正降至 26℃...
|
|
|
+主卧空调已关闭
|
|
|
+主卧空调已设置 4 小时后自动关闭
|
|
|
|
|
|
-## 第 2 题:接口多态——智能家居控制系统 ⭐⭐⭐
|
|
|
+扫地机器人 石头T10 已启动,当前电量:80%
|
|
|
+扫地机器人 石头T10 开始清扫地面...
|
|
|
+扫地机器人 石头T10 已完成清扫,自动关闭
|
|
|
+扫地机器人 石头T10 已切换到 强力 模式开始清扫
|
|
|
+
|
|
|
+书房的灯已打开
|
|
|
+书房的灯照明中...
|
|
|
+书房的灯已关闭
|
|
|
+书房的灯光变为暖黄色
|
|
|
|
|
|
-**包名**:`p2_smarthome`
|
|
|
+次卧空调已打开,设定温度:24℃
|
|
|
+次卧空调制冷中,当前室温正降至 24℃...
|
|
|
+次卧空调已关闭
|
|
|
+次卧空调已设置 4 小时后自动关闭
|
|
|
+
|
|
|
+========== 测试 startDevice 方法 ==========
|
|
|
+客厅的灯已打开
|
|
|
+设备工作中,请等待10秒...
|
|
|
+客厅的灯照明中...
|
|
|
+客厅的灯光变为暖黄色
|
|
|
+客厅的灯已关闭
|
|
|
+```
|
|
|
|
|
|
-**知识点**:接口定义、implements 实现接口、接口多态、多态参数、多态数组
|
|
|
+> **提示**:
|
|
|
+> - 在 `main` 中调用 `startDevice` 时,可以直接传入数组中的元素,如 `controller.startDevice(devices[0], 10);`
|
|
|
+> - `instanceof` 判断的是**运行时类型**,不是编译时类型
|
|
|
+> - 特有方法只能通过**向下转型**后的子类引用调用,父类/接口引用无法直接调用
|
|
|
|
|
|
### 需求说明
|
|
|
|
|
|
@@ -261,9 +280,9 @@
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 第 3 题:内部类——计算机硬件体系 ⭐⭐⭐
|
|
|
+## 第 2 题:内部类——计算机硬件体系 ⭐⭐⭐
|
|
|
|
|
|
-**包名**:`p3_computer`
|
|
|
+**包名**:`p2_computer`
|
|
|
|
|
|
**知识点**:成员内部类、私有内部类、内部类访问外部类私有成员、外部类通过方法暴露内部类
|
|
|
|
|
|
@@ -353,6 +372,5 @@ CPU:酷睿 i7,主频:3.2 GHz
|
|
|
|
|
|
| 题号 | 名称 | 核心知识点 | 难度 |
|
|
|
|------|------|-----------|------|
|
|
|
-| 第 1 题 | 动物园导游系统 | 抽象类、多态、向上转型/向下转型、instanceof、调用子类特有方法 | ⭐⭐⭐ |
|
|
|
-| 第 2 题 | 智能家居控制系统 | 接口多态、多态参数、多态数组、开闭原则 | ⭐⭐⭐ |
|
|
|
-| 第 3 题 | 计算机硬件体系 | 成员内部类、私有内部类、内部类访问外部类私有成员 | ⭐⭐⭐ |
|
|
|
+| 第 1 题 | 智能家居控制系统 | 接口多态、向上转型/向下转型、instanceof、调用实现类特有方法、开闭原则 | ⭐⭐⭐ |
|
|
|
+| 第 2 题 | 计算机硬件体系 | 成员内部类、私有内部类、内部类访问外部类私有成员 | ⭐⭐⭐ |
|