Browse Source

refactor: 将内部类作业移至课堂练习题(20260724-内部类练习.md),课后作业仅保留第1题智能家居控制系统

WanJL 10 hours ago
parent
commit
79d287ed58

+ 6 - 98
课后作业/2026年7月24日-作业.md

@@ -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、调用实现类特有方法、开闭原则 | ⭐⭐⭐ |
 | 第 1 题 | 智能家居控制系统 | 接口多态、向上转型/向下转型、instanceof、调用实现类特有方法、开闭原则 | ⭐⭐⭐ |
-| 第 2 题 | 计算机硬件体系 | 成员内部类、私有内部类、内部类访问外部类私有成员 | ⭐⭐⭐ |

+ 89 - 0
课堂练习题/20260724-内部类练习.md

@@ -0,0 +1,89 @@
+# 2026-07-24 内部类(Inner Class)基础练习(课堂练习用)
+
+> **说明**:以下习题围绕今日授课核心内容——**内部类(Inner Class)** 展开,涵盖内部类的概念与使用场景、成员内部类、私有内部类、内部类访问外部类私有成员、外部类通过方法暴露内部类等知识点。
+
+---
+
+## 练习 1:内部类入门——计算机硬件体系 ⭐⭐⭐
+
+**知识点**:成员内部类、私有内部类、内部类访问外部类私有成员、外部类通过方法暴露内部类
+
+### 需求说明
+
+一台计算机由多个硬件组成,如 **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)正在读取数据...
+```