Browse Source

上传文件至 'w4'

main
LiuZihan 2 weeks ago
parent
commit
a9e61fc695
  1. 155
      w4/README.md
  2. 14
      w4/Triangle.java
  3. BIN
      w4/代码运行结果.png
  4. BIN
      w4/类图.jpg

155
w4/README.md

@ -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. 自主完成代码编写、调试、测试,以及实验报告的最终整理。
```

14
w4/Triangle.java

@ -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;
}
}

BIN
w4/代码运行结果.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
w4/类图.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Loading…
Cancel
Save