20260724-内部类练习.md 3.7 KB

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() 完整启动流程

    // 这行应编译报错——Memory 是 Computer 的私有内部类
    // Memory mem = new Memory(16);  // ❌
    

思考题

  1. 为什么 Memory 要设计为 private 内部类?如果改为非私有会怎样?
  2. CPU 内部类直接访问外部类 private 属性,这说明了内部类的什么特点?
  3. 如果将 CPU 改为 static class CPU,还能直接访问外部类的 brandmodel 吗?为什么?

预期输出

========== 计算机信息 ==========
计算机: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)正在读取数据...