一、核心代码 【文件夹内】 二、UML 类图 【文件夹内】 五、运行结果截图 【文件夹内】 六、AI 使用情况记录 1. 借助 AI 学习封装、构造方法重载、this 关键字的核心概念 2. 在 AI 指导下完成 Car 类的属性、构造方法、getter/setter、业务方法的编写 3. AI 帮助修正了数据校验逻辑、静态成员的实现,优化了代码规范性 4. AI 指导了 IDEA 类图的生成方法,快速完成可视化建模 5. AI 辅助撰写了实验报告,梳理了实验总结与问题分析 七、关键问题回答 问题:为什么 isRented 不提供 setter?如果直接提供 setRented (boolean) 会带来什么风险? • 原因:isRented 是车辆的业务状态,必须通过 rentCar() 和 returnCar() 两个业务方法来修改,保证状态切换的逻辑合法性(比如不能重复租车、不能重复还车)。 • 风险:如果直接提供 setRented(),外部可以随意修改车辆状态,会导致业务逻辑混乱(比如车辆已租出却被强行设为未租出,造成租车公司管理混乱、数据错误),破坏了对象状态的封装性和合法性。 八、实验总结 1. 封装的好处:通过私有属性 + 公有方法,保护了对象内部状态,外部只能通过合法的方法修改数据,保证了数据的安全性和一致性。 2. 遇到的问题: ◦ 构造方法重载时 this() 的调用位置错误(必须放在第一行),AI 指导修正了位置 ◦ 日租金 setter 忘记加数据校验,导致非法值可以修改,补充了 if (dailyRent > 0) 的判断 ◦ isRented 不小心写了 setter,按照要求删除,只保留业务方法修改 3. 解决方法:通过 AI 逐行检查代码,对照实验要求修正,确保每一项都符合评分标准。