Browse Source

宋瑞-202506050301

main
Songrui 1 week ago
parent
commit
a94cfee99d
  1. 38
      w4/src/Circle.java
  2. 77
      w4/src/README。md
  3. 48
      w4/src/Rectangle.java
  4. 14
      w4/src/Shape.java
  5. 16
      w4/src/ShapeUtil.java
  6. 23
      w4/src/TestShape.java
  7. 48
      w4/src/Triangle.java

38
w4/src/Circle.java

@ -0,0 +1,38 @@
/**
* 圆形类继承自抽象图形类Shape
* 实现圆形的面积计算逻辑面积 = π * 半径²
*/
public class Circle extends Shape {
// 圆形的半径
private double radius;
/**
* 构造方法初始化圆形半径
* @param radius 半径需大于0此处做简单校验
*/
public Circle(double radius) {
if (radius <= 0) {
throw new IllegalArgumentException("半径必须大于0!");
}
this.radius = radius;
}
/**
* 实现抽象方法计算圆形面积
* @return 圆形的面积
*/
@Override
public double getArea() {
// Math.PI 是Java内置的π常量,精度更高
return Math.PI * radius * radius;
}
// Getter方法(可选,便于查看/修改半径)
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
}

77
w4/src/README。md

@ -0,0 +1,77 @@
# AI交互记录 - 图形面积计算器项目
## 项目概述
实现一个基于面向对象思想的图形面积计算器,支持圆形、矩形、三角形的面积计算,体现抽象、继承和多态特性。
---
## 交互过程
### 1. 需求分析阶段
**用户提问:** 需要设计一个图形面积计算系统,要求使用面向对象的抽象和继承特性。
**AI建议:**
- 创建抽象基类 `Shape`,定义统一的 `getArea()` 方法
- 具体图形类(Circle、Rectangle、Triangle)继承 Shape 并实现各自的面积计算逻辑
- 使用工具类 `ShapeUtil` 统一管理面积打印,体现多态性
---
### 2. 核心设计决策
#### Q1: 为什么使用抽象类而不是接口?
**AI回答:**
- 抽象类可以包含部分通用实现和成员变量
- 更符合"是一种(is-a)"的关系建模
- 便于未来扩展共享行为
#### Q2: 如何保证输入参数的合法性?
**AI建议:**
在各图形类的构造方法中添加参数校验:
---
### 3. 代码实现要点
#### Shape.java(抽象基类)
- 定义抽象方法 `getArea()` 和 `draw()`
- 强制子类实现面积计算逻辑
#### Circle.java
- 面积公式:π × r²
- 使用 `Math.PI` 提高精度
#### Rectangle.java
- 面积公式:长 × 宽
- 提供 getter/setter 便于访问属性
#### Triangle.java
- 面积公式:底 × 高 / 2
- 构造时校验底和高必须大于0
#### ShapeUtil.java
- 静态方法 `printArea(Shape shape)` 接收任意 Shape 子类
- 利用多态自动调用对应子类的 `getArea()` 方法
#### TestShape.java
- 创建三种图形实例,向上转型为 Shape 类型
- 统一调用工具类方法,验证多态效果
---
### 4. 关键技术点总结
| 概念 | 应用位置 | 说明 |
|------|---------|------|
| **抽象** | Shape类 | 定义规范,不关心具体实现 |
| **继承** | Circle/Rectangle/Triangle | 复用Shape的结构 |
| **多态** | ShapeUtil.printArea() | 同一方法处理不同图形 |
| **封装** | 私有属性+getter/setter | 保护数据安全性 |
| **异常处理** | 构造方法校验 | 防止非法参数 |
---
### 5. 运行结果示例
===== 圆形面积 ===== 该图形的面积为:78.54
===== 矩形面积 ===== 该图形的面积为:12.00
===== 三角形面积 ===== 该图形的面积为:12.00

48
w4/src/Rectangle.java

@ -0,0 +1,48 @@
/**
* 矩形类继承自抽象图形类Shape
* 实现矩形的面积计算逻辑面积 = *
*/
public class Rectangle extends Shape {
// 矩形的长和宽
private double length;
private double width;
/**
* 构造方法初始化矩形的长和宽
* @param length 需大于0
* @param width 需大于0
*/
public Rectangle(double length, double width) {
if (length <= 0 || width <= 0) {
throw new IllegalArgumentException("长和宽必须大于0!");
}
this.length = length;
this.width = width;
}
/**
* 实现抽象方法计算矩形面积
* @return 矩形的面积
*/
@Override
public double getArea() {
return length * width;
}
// Getter/Setter方法(可选)
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
}

14
w4/src/Shape.java

@ -0,0 +1,14 @@
/**
* 图形抽象类
* 定义所有图形的公共行为计算面积体现面向对象的抽象特性
*/
public abstract class Shape {
/**
* 抽象方法计算图形面积
* 由具体子类圆形矩形三角形实现各自的面积计算逻辑
* @return 图形的面积double类型
*/
public abstract double getArea();
public abstract void draw();
}

16
w4/src/ShapeUtil.java

@ -0,0 +1,16 @@
/**
* 图形工具类
* 提供统一的面积打印方法支持所有继承自Shape的图形子类
*/
public class ShapeUtil {
/**
* 打印任意图形的面积
* @param shape 图形对象可以是Circle/Rectangle/Triangle的实例体现多态
*/
public static void printArea(Shape shape) {
// 调用子类重写的getArea()方法,自动适配不同图形
double area = shape.getArea();
// 格式化输出,保留2位小数,更易读
System.out.printf("该图形的面积为:%.2f%n", area);
}
}

23
w4/src/TestShape.java

@ -0,0 +1,23 @@
/**
* 测试类验证图形面积计算器的功能
*/
public class TestShape {
public static void main(String[] args) {
// 1. 创建圆形(半径5)
Shape circle = new Circle(5);
// 2. 创建矩形(长4,宽3)
Shape rectangle = new Rectangle(4, 3);
// 3. 创建三角形(底6,高4)
Shape triangle = new Triangle(6, 4);
// 调用工具类打印面积(统一处理所有图形)
System.out.println("===== 圆形面积 =====");
ShapeUtil.printArea(circle);
System.out.println("===== 矩形面积 =====");
ShapeUtil.printArea(rectangle);
System.out.println("===== 三角形面积 =====");
ShapeUtil.printArea(triangle);
}
}

48
w4/src/Triangle.java

@ -0,0 +1,48 @@
/**
* 三角形类继承自抽象图形类Shape
* 实现三角形的面积计算逻辑面积 = * / 2
*/
public class Triangle extends Shape {
// 三角形的底和高
private double base;
private double height;
/**
* 构造方法初始化三角形的底和高
* @param base 需大于0
* @param height 需大于0
*/
public Triangle(double base, double height) {
if (base <= 0 || height <= 0) {
throw new IllegalArgumentException("底和高必须大于0!");
}
this.base = base;
this.height = height;
}
/**
* 实现抽象方法计算三角形面积
* @return 三角形的面积
*/
@Override
public double getArea() {
return (base * height) / 2;
}
// Getter/Setter方法(可选)
public double getBase() {
return base;
}
public void setBase(double base) {
this.base = base;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
}
Loading…
Cancel
Save