|
|
@@ -26,15 +26,12 @@
|
|
|
```
|
|
|
提交\
|
|
|
└─ 张三\
|
|
|
- ├─ p1_smarthome\ ← 第 1 题的包
|
|
|
- │ ├─ SmartDevice.java ← 接口
|
|
|
- │ ├─ Light.java ← 实现类(特有:调色)
|
|
|
- │ ├─ AirConditioner.java ← 实现类(特有:定时)
|
|
|
- │ ├─ RobotVacuum.java ← 实现类(特有:清洁模式)
|
|
|
- │ └─ SmartHomeController.java ← 测试类(多态 + instanceof + 向下转型)
|
|
|
- └─ p2_computer\ ← 第 2 题的包
|
|
|
- ├─ Computer.java ← 外部类(含内部类)
|
|
|
- └─ TestComputer.java ← 测试类
|
|
|
+ └─ p1_smarthome\ ← 第 1 题的包
|
|
|
+ ├─ SmartDevice.java ← 接口
|
|
|
+ ├─ Light.java ← 实现类(特有:调色)
|
|
|
+ ├─ AirConditioner.java ← 实现类(特有:定时)
|
|
|
+ ├─ RobotVacuum.java ← 实现类(特有:清洁模式)
|
|
|
+ └─ SmartHomeController.java ← 测试类(多态 + instanceof + 向下转型)
|
|
|
```
|
|
|
|
|
|
> ⚠ **注意**:包名必须严格按题目要求书写(全小写),目录结构必须与包结构一致。
|
|
|
@@ -280,97 +277,8 @@
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 第 2 题:内部类——计算机硬件体系 ⭐⭐⭐
|
|
|
-
|
|
|
-**包名**:`p2_computer`
|
|
|
-
|
|
|
-**知识点**:成员内部类、私有内部类、内部类访问外部类私有成员、外部类通过方法暴露内部类
|
|
|
-
|
|
|
-### 需求说明
|
|
|
-
|
|
|
-一台计算机由多个硬件组成,如 **CPU(处理器)** 和 **内存**。这些硬件**只能作为计算机的一部分存在**,不能脱离计算机单独使用。同时,CPU 有自己的属性和行为,内存也有自己的属性和行为。
|
|
|
-
|
|
|
-请使用 **内部类** 来设计这个计算机硬件体系。
|
|
|
-
|
|
|
-### 类设计
|
|
|
-
|
|
|
-#### Computer 类(外部类)
|
|
|
-
|
|
|
-| 成员 | 说明 |
|
|
|
-|------|------|
|
|
|
-| 私有属性 | `brand`(品牌,String)、`model`(型号,String) |
|
|
|
-| 构造方法 | `Computer(String brand, String model)` |
|
|
|
-| 方法 | `void showInfo()` —— 输出 `"计算机:xxx 品牌:xxx"` |
|
|
|
-| 方法 | `void startComputer()` —— 输出启动信息,依次调用 CPU 和 Memory 的方法 |
|
|
|
-| 方法 | `CPU getCPU()` —— 返回 CPU 对象 |
|
|
|
-| 方法 | `Memory getMemory()` —— 返回 Memory 对象 |
|
|
|
-
|
|
|
-#### CPU 内部类(成员内部类——不私有化)
|
|
|
-
|
|
|
-| 成员 | 说明 |
|
|
|
-|------|------|
|
|
|
-| 私有属性 | `name`(型号,String)、`frequency`(主频,double) |
|
|
|
-| 构造方法 | `CPU(String name, double frequency)` |
|
|
|
-| 方法 | `void calculate()` —— 输出 `"计算机 xxx xxx 的 CPU xxx(xxx GHz)正在计算..."`(访问外部类私有属性) |
|
|
|
-| 方法 | `void showCPUInfo()` —— 输出 `"CPU:xxx,主频:xxx GHz"` |
|
|
|
-
|
|
|
-#### Memory 内部类(私有内部类)
|
|
|
-
|
|
|
-| 成员 | 说明 |
|
|
|
-|------|------|
|
|
|
-| 私有属性 | `capacity`(容量,int,单位 GB) |
|
|
|
-| 构造方法 | `Memory(int capacity)` |
|
|
|
-| 方法 | `void readData()` —— 输出 `"内存(xxx GB)正在读取数据..."` |
|
|
|
-| 方法 | `void writeData()` —— 输出计算机信息 + `"内存(xxx GB)正在写入数据..."`(调用外部类 `showInfo()`) |
|
|
|
-
|
|
|
-### 测试类要求
|
|
|
-
|
|
|
-**`TestComputer` 类**:
|
|
|
-
|
|
|
-1. 创建 `Computer` 对象("联想", "ThinkPad X1"),构造方法中创建 CPU("酷睿 i7", 3.2)和 Memory(16)
|
|
|
-2. 调用 `computer.showInfo()`
|
|
|
-3. 通过 `computer.getCPU()` 获取 CPU,调用 `showCPUInfo()` 和 `calculate()`
|
|
|
-4. 尝试直接创建 `Memory` 对象(应编译报错,验证私有内部类限制)
|
|
|
-5. 通过 `computer.getMemory()` 获取 Memory,调用 `readData()` 和 `writeData()`
|
|
|
-6. 调用 `computer.startComputer()` 完整启动流程
|
|
|
-
|
|
|
-```java
|
|
|
-// 这行应编译报错——Memory 是 Computer 的私有内部类
|
|
|
-// Memory mem = new Memory(16); // ❌
|
|
|
-```
|
|
|
-
|
|
|
-### 思考题
|
|
|
-
|
|
|
-1. 为什么 Memory 要设计为 `private` 内部类?如果改为非私有会怎样?
|
|
|
-2. CPU 内部类直接访问外部类 `private` 属性,这说明了内部类的什么特点?
|
|
|
-3. 如果将 CPU 改为 `static class CPU`,还能直接访问外部类的 `brand` 和 `model` 吗?为什么?
|
|
|
-
|
|
|
-### 预期输出
|
|
|
-
|
|
|
-```
|
|
|
-========== 计算机信息 ==========
|
|
|
-计算机:ThinkPad X1 品牌:联想
|
|
|
-
|
|
|
-========== 获取 CPU ==========
|
|
|
-CPU:酷睿 i7,主频:3.2 GHz
|
|
|
-计算机 联想 ThinkPad X1 的 CPU 酷睿 i7(3.2 GHz)正在计算...
|
|
|
-
|
|
|
-========== 获取内存 ==========
|
|
|
-内存(16 GB)正在读取数据...
|
|
|
-计算机:ThinkPad X1 品牌:联想
|
|
|
-内存(16 GB)正在写入数据...
|
|
|
-
|
|
|
-========== 启动计算机 ==========
|
|
|
-计算机启动中...
|
|
|
-计算机 联想 ThinkPad X1 的 CPU 酷睿 i7(3.2 GHz)正在计算...
|
|
|
-内存(16 GB)正在读取数据...
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
## 📋 题目总览
|
|
|
|
|
|
| 题号 | 名称 | 核心知识点 | 难度 |
|
|
|
|------|------|-----------|------|
|
|
|
| 第 1 题 | 智能家居控制系统 | 接口多态、向上转型/向下转型、instanceof、调用实现类特有方法、开闭原则 | ⭐⭐⭐ |
|
|
|
-| 第 2 题 | 计算机硬件体系 | 成员内部类、私有内部类、内部类访问外部类私有成员 | ⭐⭐⭐ |
|