Selaa lähdekoodia

refactor: 重写20260727内部类练习第1题,移除已删除练习的引用,改用餐厅场景

WanJL 19 tuntia sitten
vanhempi
commit
0f2f830cdf
1 muutettua tiedostoa jossa 48 lisäystä ja 45 poistoa
  1. 48 45
      课堂练习题/20260727-内部类练习.md

+ 48 - 45
课堂练习题/20260727-内部类练习.md

@@ -4,93 +4,96 @@
 
 ---
 
-## 练习 1:静态成员内部类——电脑硬件升级(显卡与硬盘)⭐⭐
+## 练习 1:静态成员内部类——餐厅菜单与厨师信息 ⭐⭐
 
 **知识点**:静态成员内部类、`static` 修饰内部类的特点、静态内部类的创建格式、静态内部类与外部类的关系
 
 ### 需求说明
 
-在之前的练习中,我们使用 **普通成员内部类** 设计了计算机的 CPU 和内存。这次,我们换成 **静态成员内部类** 来设计电脑的 **显卡(GraphicsCard)** 和 **硬盘(HardDisk)**,体验静态内部类在创建方式和访问权限上的不同
+餐厅(Restaurant)有自己的 **菜单项(MenuItem)** 和 **厨师(Chef)**。菜单项和厨师信息可以脱离具体的餐厅实例独立存在(例如连锁餐厅采用统一标准),但它们在业务逻辑上又属于餐厅的一部分。请使用 **静态成员内部类(`static` 修饰)** 来设计这个体系
 
-> 显卡和硬盘同样是计算机的重要部件,但使用 `static` 修饰后,它们可以不依赖外部类实例而独立创建
+> 静态内部类使用 `static` 修饰,创建时**不需要**先创建外部类对象,格式为 `new 外部类名.内部类名(...)`
 
 ### 类设计
 
-#### Computer 类(外部类)
+#### Restaurant 类(外部类)
 
 | 成员 | 说明 |
 |------|------|
-| 私有属性 | `brand`(品牌,String)、`price`(价格,double) |
-| 构造方法 | `Computer(String brand, double price)` |
-| 方法 | `void showInfo()` —— 输出电脑品牌和价格 |
-| 方法 | `void startComputer()` —— 输出启动信息,调用显卡的 `render()` 和硬盘的 `readData()` |
+| 私有属性 | `name`(店名,String)、`address`(地址,String) |
+| 构造方法 | `Restaurant(String name, String address)` |
+| 方法 | `void showInfo()` —— 输出 `"xxx(地址:xxx)"` |
+| 方法 | `void openRestaurant()` —— 输出餐厅开业信息,依次调用每个厨师和菜单项的方法 |
 
-#### GraphicsCard 类(**静态成员内部类**)
+#### MenuItem 类(**静态成员内部类**)
 
 | 成员 | 说明 |
 |------|------|
-| 私有属性 | `model`(型号,String)、`vram`(显存,int,单位 GB) |
-| 构造方法 | `GraphicsCard(String model, int vram)` |
-| 方法 | `void render()` —— 输出 `"显卡(xxx,xxx GB)正在渲染画面..."` |
-| 方法 | `void showSpec()` —— 输出 `"显卡规格:xxx,显存:xxx GB"` |
+| 私有属性 | `dishName`(菜品名,String)、`price`(价格,double) |
+| 构造方法 | `MenuItem(String dishName, double price)` |
+| 方法 | `void showDish()` —— 输出 `"xxx —— ¥xxx"` |
+| 方法 | `void describe()` —— 输出 `"这是 xxx,价格 ¥xxx,欢迎品尝"` |
 
-#### HardDisk 类(**静态成员内部类**)
+#### Chef 类(**静态成员内部类**)
 
 | 成员 | 说明 |
 |------|------|
-| 私有属性 | `capacity`(容量,int,单位 GB)、`type`(类型,String,如 "SSD" / "HDD") |
-| 构造方法 | `HardDisk(int capacity, String type)` |
-| 方法 | `void readData()` —— 输出 `"硬盘(xxx GB,xxx)正在读取数据..."` |
-| 方法 | `void writeData()` —— 输出 `"硬盘(xxx GB,xxx)正在写入数据..."` |
+| 私有属性 | `name`(姓名,String)、`specialty`(拿手菜,String) |
+| 构造方法 | `Chef(String name, String specialty)` |
+| 方法 | `void cook()` —— 输出 `"厨师 xxx 正在烹饪拿手菜:xxx"` |
+| 方法 | `void showInfo()` —— 输出 `"厨师:xxx \| 拿手菜:xxx"` |
 
 ### 测试类要求
 
-**`TestComputer2` 类**:
+**`TestRestaurant` 类**:
 
-1. **直接创建显卡对象**
+1. **直接创建菜单项对象**(不依赖 Restaurant 实例)
    ```java
-   Computer.GraphicsCard gpu = new Computer.GraphicsCard("RTX 4070", 12);
+   Restaurant.MenuItem item1 = new Restaurant.MenuItem("宫保鸡丁", 38.0);
+   Restaurant.MenuItem item2 = new Restaurant.MenuItem("麻婆豆腐", 28.0);
    ```
-   > 静态内部类 **不需要** 先创建外部类对象,格式为 `外部类名.内部类名`
+   > 静态内部类的创建格式:`外部类名.内部类名 对象名 = new 外部类名.内部类名(...)`
 
-2. **直接创建硬盘对象**
+2. **直接创建厨师对象**(不依赖 Restaurant 实例)
    ```java
-   Computer.HardDisk disk = new Computer.HardDisk(1024, "SSD");
+   Restaurant.Chef chef1 = new Restaurant.Chef("王师傅", "宫保鸡丁");
+   Restaurant.Chef chef2 = new Restaurant.Chef("李师傅", "麻婆豆腐");
    ```
 
-3. 调用显卡的 `showSpec()` 和 `render()` 方法
+3. 分别调用菜单项和厨师的方法展示信息
 
-4. 调用硬盘的 `readData()` 和 `writeData()` 方法
+4. 创建 `Restaurant` 对象("川味轩", "北京市海淀区"),调用 `openRestaurant()`
 
-5. 创建 `Computer` 对象("华硕", 8999.0),调用 `startComputer()`
-
-6. **尝试**:在 GraphicsCard 的 `render()` 方法中直接访问外部类的 `brand` 属性——观察是否编译报错
+5. **尝试**:在 `Chef` 的 `cook()` 方法中直接访问外部类的 `name` 属性——观察是否编译报错,理解静态内部类的访问限制
 
 ### 思考题
 
-1. 静态内部类和普通成员内部类在 **创建方式** 上有什么区别?从 `new` 的语法角度分析
+1. 静态内部类和普通成员内部类在 **创建方式** 上有什么区别?从 `new` 的语法角度具体说明
 
-2. 静态内部类能否直接访问外部类的 **实例成员**(如 `brand`、`price`)?为什么?
+2. 静态内部类能否直接访问外部类的 **实例成员**(如 `name`、`address`)?为什么?
 
-3. 如果确实需要在静态内部类中访问外部类的实例成员,应该如何改造代码?(提示:通过参数传递外部类引用
+3. 如果确实需要在静态内部类中访问外部类的实例成员,应该如何改造代码?(提示:通过参数将外部类引用传入静态内部类
 
-4. 对比之前的 CPU(成员内部类)和现在的 GraphicsCard(静态内部类),哪种内部类更适合描述"计算机的部件"这个场景?说说你的理由。
+4. 在这个场景中,`MenuItem` 和 `Chef` 设计为静态内部类是否合理?如果改为普通成员内部类,会对创建方式产生什么影响?
 
 ### 预期输出
 
 ```
-========== 独立创建显卡 ==========
-显卡规格:RTX 4070,显存:12 GB
-显卡(RTX 4070,12 GB)正在渲染画面...
-
-========== 独立创建硬盘 ==========
-硬盘(1024 GB,SSD)正在读取数据...
-硬盘(1024 GB,SSD)正在写入数据...
-
-========== 启动计算机 ==========
-计算机 华硕 正在启动...
-显卡(RTX 4070,12 GB)正在渲染画面...
-硬盘(1024 GB,SSD)正在读取数据...
+========== 菜单信息 ==========
+宫保鸡丁 —— ¥38.0
+这是 宫保鸡丁,价格 ¥38.0,欢迎品尝
+麻婆豆腐 —— ¥28.0
+这是 麻婆豆腐,价格 ¥28.0,欢迎品尝
+
+========== 厨师信息 ==========
+厨师:王师傅 | 拿手菜:宫保鸡丁
+厨师:李师傅 | 拿手菜:麻婆豆腐
+
+========== 餐厅开业 ==========
+川味轩(地址:北京市海淀区)开业啦!
+厨师 王师傅 正在烹饪拿手菜:宫保鸡丁
+厨师 李师傅 正在烹饪拿手菜:麻婆豆腐
+欢迎莅临品尝!
 ```
 
 ---