# 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)正在读取数据... ```