说明:以下习题围绕今日授课核心内容——内部类(Inner Class) 展开,涵盖内部类的概念与使用场景、成员内部类、私有内部类、内部类访问外部类私有成员、外部类通过方法暴露内部类等知识点。
知识点:成员内部类、私有内部类、内部类访问外部类私有成员、外部类通过方法暴露内部类
一台计算机由多个硬件组成,如 CPU(处理器) 和 内存。这些硬件只能作为计算机的一部分存在,不能脱离计算机单独使用。同时,CPU 有自己的属性和行为,内存也有自己的属性和行为。
请使用 内部类 来设计这个计算机硬件体系。
| 成员 | 说明 |
|---|---|
| 私有属性 | brand(品牌,String)、model(型号,String) |
| 构造方法 | Computer(String brand, String model) |
| 方法 | void showInfo() —— 输出 "计算机:xxx 品牌:xxx" |
| 方法 | void startComputer() —— 输出启动信息,依次调用 CPU 和 Memory 的方法 |
| 方法 | CPU getCPU() —— 返回 CPU 对象 |
| 方法 | Memory getMemory() —— 返回 Memory 对象 |
| 成员 | 说明 |
|---|---|
| 私有属性 | name(型号,String)、frequency(主频,double) |
| 构造方法 | CPU(String name, double frequency) |
| 方法 | void calculate() —— 输出 "计算机 xxx xxx 的 CPU xxx(xxx GHz)正在计算..."(访问外部类私有属性) |
| 方法 | void showCPUInfo() —— 输出 "CPU:xxx,主频:xxx GHz" |
| 成员 | 说明 |
|---|---|
| 私有属性 | capacity(容量,int,单位 GB) |
| 构造方法 | Memory(int capacity) |
| 方法 | void readData() —— 输出 "内存(xxx GB)正在读取数据..." |
| 方法 | void writeData() —— 输出计算机信息 + "内存(xxx GB)正在写入数据..."(调用外部类 showInfo()) |
TestComputer 类:
Computer 对象("联想", "ThinkPad X1"),构造方法中创建 CPU("酷睿 i7", 3.2)和 Memory(16)computer.showInfo()computer.getCPU() 获取 CPU,调用 showCPUInfo() 和 calculate()Memory 对象(应编译报错,验证私有内部类限制)computer.getMemory() 获取 Memory,调用 readData() 和 writeData()调用 computer.startComputer() 完整启动流程
// 这行应编译报错——Memory 是 Computer 的私有内部类
// Memory mem = new Memory(16); // ❌
private 内部类?如果改为非私有会怎样?private 属性,这说明了内部类的什么特点?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)正在读取数据...