diff --git a/W4/Shape.java b/W4/Shape.java new file mode 100644 index 0000000..25bd05d --- /dev/null +++ b/W4/Shape.java @@ -0,0 +1,47 @@ +public abstract class Shape { + public abstract double getArea(); +} +class Circle extends Shape { + private double radius; + public Circle(double radius) { + this.radius = radius; + } + public double getArea() { + return Math.PI * radius * radius; + } +} +class Rectangle extends Shape { + private double width, height; + public Rectangle(double width, double height) { + this.width = width; + this.height = height; + } + public double getArea() { + return width * height; + } +} +class Triangle extends Shape { + private double base, height; + public Triangle(double base, double height) { + this.base = base; + this.height = height; + } + public double getArea() { + return 0.5 * base * height; + } +} +class ShapeUtil { + public static void printArea(Shape shape) { + System.out.println("面积:" + shape.getArea()); + } +} +class Main { + public static void main(String[] args) { + Shape circle = new Circle(5); + Shape rect = new Rectangle(4, 6); + Shape tri = new Triangle(3, 4); + ShapeUtil.printArea(circle); + ShapeUtil.printArea(rect); + ShapeUtil.printArea(tri); + } +} \ No newline at end of file diff --git a/W4/反思.txt b/W4/反思.txt new file mode 100644 index 0000000..6ac9326 --- /dev/null +++ b/W4/反思.txt @@ -0,0 +1,6 @@ +实验反思 +本次实验通过抽象类、继承和多态重构图形面积计算,让我深刻理解了面向对象的设计思想。 +1. 核心收获:我明确了抽象类是定义统一接口的规范,子类通过重写实现具体逻辑,而多态让工具类能统一处理所有图形,大幅提升了代码的复用性和扩展性。 +2. 设计思考:在图形类的设计中,“圆、矩形、三角形都是图形”,这种稳定的“is-a”关系最适合用继承来实现。这让我明白,选择继承还是组合,关键在于类之间的逻辑关系是否稳定且从属。 +3. 问题与改进:在编写多文件代码时,我曾因文件名与公共类名不匹配导致编译失败。这让我严格遵守了Java的文件命名规则,也提升了我规范编写代码的习惯。 +这次实验不仅完成了功能要求,更让我体会到良好的类结构设计能让程序更易维护。 diff --git a/W4/实验报告.txt b/W4/实验报告.txt new file mode 100644 index 0000000..5af1513 --- /dev/null +++ b/W4/实验报告.txt @@ -0,0 +1,15 @@ +一、AI使用情况记录 +1. 抽象类与多态概念理解:通过AI快速理解抽象类、继承、多态的核心思想,明确实验设计思路。 +2. 代码框架生成:AI提供了Shape、Circle、Rectangle、Triangle、ShapeUtil的基础代码结构,帮助我快速搭建程序。 +3. 语法与错误排查:在编写代码时,AI帮助我检查语法错误、方法重写规范、类名与文件名匹配规则等问题。 +4. 类图绘制指导:AI提供了类图的结构与符号说明,帮助我正确绘制继承关系与类结构。 +5. 实验报告思路整理:AI辅助梳理实验目的、原理、步骤、结果与反思,使报告结构更清晰。 +二、组合 vs 继承 +1. 继承 +特点:子类继承父类的属性与方法,可重写父类方法。 +优点:代码复用性强,结构清晰,适合稳定的层级关系。 +缺点:耦合度高,父类修改会影响所有子类。 +2. 组合 +特点:一个类包含另一个类的对象作为成员。 +优点:耦合度低,灵活、可扩展、易维护。 +缺点:代码量略多,需要显式调用成员对象的方法。 diff --git a/W4/类图.txt b/W4/类图.txt new file mode 100644 index 0000000..5883d2e --- /dev/null +++ b/W4/类图.txt @@ -0,0 +1,29 @@ ++---------------------------+ +| <> | +| Shape | ++---------------------------+ +| | ++---------------------------+ +| + getArea(): double | <-- 抽象方法 ++---------------------------+ + ^ + | ++----------+----------+----------+ +| | | ++----------------+ +----------------+ +----------------+ +| Circle | | Rectangle | | Triangle | ++----------------+ +----------------+ +----------------+ +| - radius: double| | - width: double | | - base: double | +| | | - height: double| | - height: double| ++----------------+ +----------------+ +----------------+ +| + getArea(): double| | + getArea(): double| | + getArea(): double| ++----------------+ +----------------+ +----------------+ + + ++---------------------------+ +| ShapeUtil | ++---------------------------+ +| | ++---------------------------+ +| + printArea(Shape): void | <-- 静态方法 ++---------------------------+ \ No newline at end of file diff --git a/W4/运行截图.png b/W4/运行截图.png new file mode 100644 index 0000000..385e072 Binary files /dev/null and b/W4/运行截图.png differ