4 changed files with 169 additions and 0 deletions
@ -0,0 +1,155 @@ |
|||||
|
|
||||
|
# 图形面积计算器重构 实验报告 |
||||
|
|
||||
|
## 一、实验目的 |
||||
|
1. 掌握 Java 抽象类与抽象方法的使用。 |
||||
|
2. 理解面向对象的继承、多态特性。 |
||||
|
3. 实现不同图形类的统一处理,提高代码扩展性。 |
||||
|
|
||||
|
## 二、实验任务 |
||||
|
1. 设计抽象类 `Shape`,包含抽象方法 `getArea()`。 |
||||
|
2. 让 `Circle`、`Rectangle`、`Triangle` 继承 `Shape` 并实现面积计算。 |
||||
|
3. 编写工具类 `ShapeUtil`,提供统一打印面积的方法。 |
||||
|
4. 绘制 UML 类图。 |
||||
|
5. 完成代码测试与实验报告。 |
||||
|
|
||||
|
## 三、实验环境 |
||||
|
- 开发工具:Eclipse |
||||
|
- 编程语言:Java |
||||
|
- 版本控制:Git |
||||
|
|
||||
|
## 四、项目结构 |
||||
|
``` |
||||
|
src/ |
||||
|
├── Shape.java // 抽象类 |
||||
|
├── Circle.java // 圆形类 |
||||
|
├── Rectangle.java // 矩形类 |
||||
|
├── Triangle.java // 三角形类 |
||||
|
├── ShapeUtil.java // 工具类 |
||||
|
└── ShapeTest.java // 测试主类 |
||||
|
``` |
||||
|
|
||||
|
## 五、核心代码实现 |
||||
|
|
||||
|
### 1. 抽象类 Shape |
||||
|
```java |
||||
|
public abstract class Shape { |
||||
|
// 抽象方法:计算面积,子类必须实现 |
||||
|
public abstract double getArea(); |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
### 2. 圆形类 Circle |
||||
|
```java |
||||
|
public class Circle extends Shape { |
||||
|
// 私有属性:半径 |
||||
|
private double radius; |
||||
|
|
||||
|
// 构造方法:初始化半径 |
||||
|
public Circle(double radius) { |
||||
|
this.radius = radius; |
||||
|
} |
||||
|
|
||||
|
// 重写父类抽象方法:计算圆面积 πr² |
||||
|
@Override |
||||
|
public double getArea() { |
||||
|
return Math.PI * radius * radius; |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
### 3. 矩形类 Rectangle |
||||
|
```java |
||||
|
public 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; |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
### 4. 三角形类 Triangle |
||||
|
```java |
||||
|
public class Triangle extends Shape { |
||||
|
// 私有属性:底、高 |
||||
|
private double base; |
||||
|
private double height; |
||||
|
|
||||
|
// 构造方法:初始化底和高 |
||||
|
public Triangle(double base, double height) { |
||||
|
this.base = base; |
||||
|
this.height = height; |
||||
|
} |
||||
|
|
||||
|
// 重写父类抽象方法:计算三角形面积 底×高/2 |
||||
|
@Override |
||||
|
public double getArea() { |
||||
|
return base * height / 2; |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
### 5. 工具类 ShapeUtil |
||||
|
```java |
||||
|
public class ShapeUtil { |
||||
|
// 统一打印任意图形的面积(多态实现) |
||||
|
public static void printArea(Shape shape) { |
||||
|
System.out.println("图形面积:" + shape.getArea()); |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
### 6. 测试主类 ShapeTest |
||||
|
```java |
||||
|
public class ShapeTest { |
||||
|
public static void main(String[] args) { |
||||
|
// 1. 创建不同图形对象(向上转型为Shape父类) |
||||
|
Shape circle = new Circle(5); |
||||
|
Shape rectangle = new Rectangle(4, 6); |
||||
|
Shape triangle = new Triangle(3, 4); |
||||
|
|
||||
|
// 2. 统一调用工具类打印面积(多态自动调用子类方法) |
||||
|
System.out.print("圆形:"); |
||||
|
ShapeUtil.printArea(circle); |
||||
|
|
||||
|
System.out.print("矩形:"); |
||||
|
ShapeUtil.printArea(rectangle); |
||||
|
|
||||
|
System.out.print("三角形:"); |
||||
|
ShapeUtil.printArea(triangle); |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
## 六、UML 类图 |
||||
|
见提交作业 |
||||
|
|
||||
|
## 七、运行结果 |
||||
|
``` |
||||
|
圆形:图形面积:78.53981633974483 |
||||
|
矩形:图形面积:24.0 |
||||
|
三角形:图形面积:6.0 |
||||
|
``` |
||||
|
|
||||
|
## 八、实验总结 |
||||
|
1. **抽象类的作用**:`Shape` 作为抽象父类,定义了所有图形的统一行为规范,强制子类必须实现 `getArea()` 方法,保证了代码的一致性。 |
||||
|
2. **多态的优势**:通过父类引用指向子类对象,`ShapeUtil` 可以统一处理所有图形,无需为每个图形单独写打印方法,大幅提升了代码的扩展性。 |
||||
|
3. **面向对象思想**:本次实验完整实践了封装(私有属性+构造方法)、继承(子类继承父类)、多态(方法重写+父类引用)三大面向对象核心特性。 |
||||
|
4. **代码扩展性**:后续新增图形(如正方形、梯形),只需继承 `Shape` 并实现 `getArea()`,无需修改 `ShapeUtil` 等已有代码,符合开闭原则。 |
||||
|
|
||||
|
## 九、AI 使用情况 |
||||
|
1. 使用 AI 辅助理解抽象类、多态的核心概念,梳理代码结构。 |
||||
|
2. AI 提供了代码规范优化、类图绘制、实验报告撰写的指导。 |
||||
|
3. 自主完成代码编写、调试、测试,以及实验报告的最终整理。 |
||||
|
``` |
||||
@ -0,0 +1,14 @@ |
|||||
|
public 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 base * height / 2; |
||||
|
} |
||||
|
} |
||||
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 238 KiB |
Loading…
Reference in new issue