5 changed files with 97 additions and 0 deletions
@ -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); |
|||
} |
|||
} |
|||
@ -0,0 +1,6 @@ |
|||
实验反思 |
|||
本次实验通过抽象类、继承和多态重构图形面积计算,让我深刻理解了面向对象的设计思想。 |
|||
1. 核心收获:我明确了抽象类是定义统一接口的规范,子类通过重写实现具体逻辑,而多态让工具类能统一处理所有图形,大幅提升了代码的复用性和扩展性。 |
|||
2. 设计思考:在图形类的设计中,“圆、矩形、三角形都是图形”,这种稳定的“is-a”关系最适合用继承来实现。这让我明白,选择继承还是组合,关键在于类之间的逻辑关系是否稳定且从属。 |
|||
3. 问题与改进:在编写多文件代码时,我曾因文件名与公共类名不匹配导致编译失败。这让我严格遵守了Java的文件命名规则,也提升了我规范编写代码的习惯。 |
|||
这次实验不仅完成了功能要求,更让我体会到良好的类结构设计能让程序更易维护。 |
|||
@ -0,0 +1,15 @@ |
|||
一、AI使用情况记录 |
|||
1. 抽象类与多态概念理解:通过AI快速理解抽象类、继承、多态的核心思想,明确实验设计思路。 |
|||
2. 代码框架生成:AI提供了Shape、Circle、Rectangle、Triangle、ShapeUtil的基础代码结构,帮助我快速搭建程序。 |
|||
3. 语法与错误排查:在编写代码时,AI帮助我检查语法错误、方法重写规范、类名与文件名匹配规则等问题。 |
|||
4. 类图绘制指导:AI提供了类图的结构与符号说明,帮助我正确绘制继承关系与类结构。 |
|||
5. 实验报告思路整理:AI辅助梳理实验目的、原理、步骤、结果与反思,使报告结构更清晰。 |
|||
二、组合 vs 继承 |
|||
1. 继承 |
|||
特点:子类继承父类的属性与方法,可重写父类方法。 |
|||
优点:代码复用性强,结构清晰,适合稳定的层级关系。 |
|||
缺点:耦合度高,父类修改会影响所有子类。 |
|||
2. 组合 |
|||
特点:一个类包含另一个类的对象作为成员。 |
|||
优点:耦合度低,灵活、可扩展、易维护。 |
|||
缺点:代码量略多,需要显式调用成员对象的方法。 |
|||
@ -0,0 +1,29 @@ |
|||
+---------------------------+ |
|||
| <<abstract>> | |
|||
| 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 | <-- 静态方法 |
|||
+---------------------------+ |
|||
|
After Width: | Height: | Size: 42 KiB |
Loading…
Reference in new issue