You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
2 weeks ago | |
|---|---|---|
| .. | ||
| Circle.java | 2 weeks ago | |
| README.md | 2 weeks ago | |
| Rectangle.java | 2 weeks ago | |
| Shape.java | 2 weeks ago | |
| ShapeTest.java | 2 weeks ago | |
| ShapeUtil.java | 2 weeks ago | |
| Triangle.java | 2 weeks ago | |
| 代码运行结果.png | 2 weeks ago | |
| 类图.jpg | 2 weeks ago | |
README.md
图形面积计算器重构 实验报告
一、实验目的
- 掌握 Java 抽象类与抽象方法的使用。
- 理解面向对象的继承、多态特性。
- 实现不同图形类的统一处理,提高代码扩展性。
二、实验任务
- 设计抽象类
Shape,包含抽象方法getArea()。 - 让
Circle、Rectangle、Triangle继承Shape并实现面积计算。 - 编写工具类
ShapeUtil,提供统一打印面积的方法。 - 绘制 UML 类图。
- 完成代码测试与实验报告。
三、实验环境
- 开发工具:Eclipse
- 编程语言:Java
- 版本控制:Git
四、项目结构
src/
├── Shape.java // 抽象类
├── Circle.java // 圆形类
├── Rectangle.java // 矩形类
├── Triangle.java // 三角形类
├── ShapeUtil.java // 工具类
└── ShapeTest.java // 测试主类
五、核心代码实现
1. 抽象类 Shape
public abstract class Shape {
// 抽象方法:计算面积,子类必须实现
public abstract double getArea();
}
2. 圆形类 Circle
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
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
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
public class ShapeUtil {
// 统一打印任意图形的面积(多态实现)
public static void printArea(Shape shape) {
System.out.println("图形面积:" + shape.getArea());
}
}
6. 测试主类 ShapeTest
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
八、实验总结
- 抽象类的作用:
Shape作为抽象父类,定义了所有图形的统一行为规范,强制子类必须实现getArea()方法,保证了代码的一致性。 - 多态的优势:通过父类引用指向子类对象,
ShapeUtil可以统一处理所有图形,无需为每个图形单独写打印方法,大幅提升了代码的扩展性。 - 面向对象思想:本次实验完整实践了封装(私有属性+构造方法)、继承(子类继承父类)、多态(方法重写+父类引用)三大面向对象核心特性。
- 代码扩展性:后续新增图形(如正方形、梯形),只需继承
Shape并实现getArea(),无需修改ShapeUtil等已有代码,符合开闭原则。
九、AI 使用情况
- 使用 AI 辅助理解抽象类、多态的核心概念,梳理代码结构。
- AI 提供了代码规范优化、类图绘制、实验报告撰写的指导。
- 自主完成代码编写、调试、测试,以及实验报告的最终整理。