You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
3.4 KiB

一、实验目的
1. 掌握Java抽象类、继承和多态的核心用法。
2. 学会用统一的方式处理不同图形的面积计算,简化代码结构。
3. 能绘制基础的UML类图,理清类之间的继承与依赖关系。
4. 理解组合与继承的区别,能根据场景选择合适的代码复用方式。
二、实验内容
1. 定义抽象类 Shape ,声明抽象方法 getArea() ,规范所有图形的面积计算行为。
2. 创建 Circle 、 Rectangle 、 Triangle 三个类,继承 Shape 并各自重写 getArea() 方法,实现对应图形的面积计算逻辑。
3. 编写 ShapeUtil 工具类,通过 printArea() 方法统一打印图形面积,利用多态特性适配不同图形对象。
4. 编写 Main 类作为程序入口,创建各类图形对象,调用工具类测试功能,确保运行正常。
5. 用Mermaid工具绘制UML类图,清晰展示类的继承关系和依赖关系。
三,ai协助记录
1. 帮我捋清楚这次实验的整体思路,知道该先写抽象类  Shape ,再让图形类去继承它。
2. 写代码的时候,我哪里不会就问 AI,比如  Circle 、 Rectangle  这些类怎么写,还有  ShapeUtil  工具类的逻辑。
3. 我跑代码报错,比如找不到  main  方法、类名不一致,都是 AI 帮我分析问题,教我怎么改的。
4. 画类图的时候,AI 给我讲了类之间的继承箭头怎么画,还帮我调整了类图的结构,让我看得更明白。
5. 报告里“组合和继承”的区别,我一开始分不清,AI 用大白话给我解释,还帮我整理了对比的内容。
四、组合与继承的回答
1. 继承(Inheritance)
- 定义:是“is-a”的关系,比如圆形是一种图形、矩形是一种图形,子类通过 extends 关键字继承父类的属性和方法,并重写父类的抽象方法来实现专属逻辑。- 本次实验中的作用:用 Shape 作为父类,统一规范所有图形的 getArea() 方法,让不同图形类有统一的行为标准,后续新增图形(比如正方形、梯形)只需继承 Shape 并重写方法即可,不用重新定义规范,代码复用性很强。
- 优点:代码结构清晰,能快速建立类的层级关系,统一管理子类的行为规范,适合“本质是同类事物”的场景。
2. 组合(Composition) - 定义:是“has-a”的关系,通过在一个类中引用另一个类的对象来实现功能复用,比如 ShapeUtil 中使用 Shape 对象,不是继承它,而是调用它的方法。
- 本次实验中的体现: ShapeUtil 不继承 Shape ,而是通过 printArea(Shape shape) 方法接收 Shape 类型的参数,间接使用 Shape 子类的功能,这种依赖关系就是组合的一种简单形式。
- 优点:降低类之间的耦合度,父类修改不会直接影响调用类,扩展更灵活,适合“一个类需要使用另一个类功能”的场景,而非本质从属关系。
五、实验反思
这次实验做完,我对抽象类、继承和多态的理解比之前深了很多。一开始我觉得没必要写抽象类,直接给每个图形类写个计算面积的方法不就行了,后来发现这样写代码很散乱,要是以后加新图形,很容易忘记加计算方法,而用抽象类统一规范后,所有子类都必须实现 getArea() ,不容易出错,这才明白抽象类的核心作用是“定规矩”。