Browse Source

上传文件至 'w5'

main
SunWenxuan 3 weeks ago
parent
commit
82bb54b80f
  1. 67
      w5/Main.java
  2. 2
      w5/反思.txt
  3. 46
      w5/实验报告.txt
  4. BIN
      w5/类图.png
  5. BIN
      w5/运行成功截图.png

67
w5/Main.java

@ -0,0 +1,67 @@
// 抽象图形类
abstract class Shape {
public abstract double getArea();
}
// 圆形类
class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double getArea() {
return Math.PI * radius * radius;
}
}
// 矩形类
class Rectangle extends Shape {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
@Override
public double getArea() {
return width * height;
}
}
// 三角形类
class Triangle extends Shape {
private double base;
private double height;
public Triangle(double base, double height) {
this.base = base;
this.height = height;
}
@Override
public double getArea() {
return 0.5 * base * height;
}
}
// 工具类
class ShapeUtil {
public void printArea(Shape shape) {
System.out.printf("面积:%.2f%n", shape.getArea());
}
}
// 主类(程序入口)
public class Main {
public static void main(String[] args) {
ShapeUtil util = new ShapeUtil();
util.printArea(new Circle(5));
util.printArea(new Rectangle(4, 6));
util.printArea(new Triangle(3, 4));
}
}

2
w5/反思.txt

@ -0,0 +1,2 @@
反思:
这次实验做完,我对抽象类、继承和多态的理解比之前深了很多。一开始我觉得没必要写抽象类,直接给每个图形类写个计算面积的方法不就行了,后来发现这样写代码很散乱,要是以后加新图形,很容易忘记加计算方法,而用抽象类统一规范后,所有子类都必须实现 getArea() ,不容易出错,这才明白抽象类的核心作用是“定规矩”。

46
w5/实验报告.txt

@ -0,0 +1,46 @@
一、实验目的
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() ,不容易出错,这才明白抽象类的核心作用是“定规矩”。

BIN
w5/类图.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 KiB

BIN
w5/运行成功截图.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 KiB

Loading…
Cancel
Save