diff --git a/w4/Circle.java b/w4/Circle.java new file mode 100644 index 0000000..5dbe72a --- /dev/null +++ b/w4/Circle.java @@ -0,0 +1,35 @@ +/** + * 圆形类,继承Shape,实现面积计算 + */ + public class Circle extends Shape { + // 圆的半径 + private double radius; + // π常量 + private static final double PI = 3.1415926; + /** + * 无参构造 + */ + public Circle() {} + /** + * 带参构造,初始化半径 + * @param radius 半径 + */ + public Circle(double radius) { + this.radius = radius; + } + /** + * 实现父类抽象方法,计算圆面积:πr² + * @return 圆的面积 + */ + @Override + public double getArea() { + return PI * radius * radius; + } + // Getter和Setter + public double getRadius() { + return radius; + } + public void setRadius(double radius) { + this.radius = radius; + } + } \ No newline at end of file diff --git a/w4/Main.java b/w4/Main.java new file mode 100644 index 0000000..d6aa0a4 --- /dev/null +++ b/w4/Main.java @@ -0,0 +1,20 @@ +/** + * 测试类,验证图形面积计算器的功能 + */ + public class Main { + 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); + // 4. 通过工具类统一打印面积(多态效果) + System.out.println("=== 圆形面积 ==="); + ShapeUtil.printArea(circle); + System.out.println("\n=== 矩形面积 ==="); + ShapeUtil.printArea(rectangle); + System.out.println("\n=== 三角形面积 ==="); + ShapeUtil.printArea(triangle); + } + } \ No newline at end of file diff --git a/w4/README.md b/w4/README.md new file mode 100644 index 0000000..60da472 --- /dev/null +++ b/w4/README.md @@ -0,0 +1,30 @@ +图形面积计算器重构实验 + +一、实验背景 + +现有Circle、Rectangle、Triangle三个图形类独立存在,无法统一处理。本实验通过抽象类+继承重构,实现图形面积的统一计算与打印。 + + + +二、文件说明 + +Shape.java:抽象父类,定义面积计算接口 + +Circle.java:圆形类,继承Shape + +Rectangle.java:矩形类,继承Shape + +Triangle.java:三角形类,继承Shape + +ShapeUtil.java:工具类,统一打印面积 + +Main.java:测试类,程序入口 + + + +三、运行步骤 + +编译:javac \*.java + +运行:java Main + diff --git a/w4/Rectangle.java b/w4/Rectangle.java new file mode 100644 index 0000000..7437bc0 --- /dev/null +++ b/w4/Rectangle.java @@ -0,0 +1,43 @@ +/** + * 矩形类,继承Shape,实现面积计算 + */ + public class Rectangle extends Shape { + // 长 + private double length; + // 宽 + private double width; + /** + * 无参构造 + */ + public Rectangle() {} + /** + * 带参构造,初始化长和宽 + * @param length 长 + * @param width 宽 + */ + public Rectangle(double length, double width) { + 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; + } + } \ No newline at end of file diff --git a/w4/Shape.java b/w4/Shape.java new file mode 100644 index 0000000..2c268c6 --- /dev/null +++ b/w4/Shape.java @@ -0,0 +1,10 @@ +/** + * 图形抽象父类,定义统一的面积计算接口 + */ +public abstract class Shape { + /** + * 抽象方法:计算图形面积,由子类具体实现 + * @return 图形面积 + */ + public abstract double getArea(); +} \ No newline at end of file diff --git a/w4/ShapeUtil.java b/w4/ShapeUtil.java new file mode 100644 index 0000000..080928f --- /dev/null +++ b/w4/ShapeUtil.java @@ -0,0 +1,12 @@ +/** + * 图形工具类,提供统一的面积打印方法 + */ +public class ShapeUtil { + /** + * 统一打印图形面积的方法,支持所有Shape子类 + * @param shape 图形对象(Circle/Rectangle/Triangle) + */ + public static void printArea(Shape shape) { + System.out.println("该图形的面积为:" + shape.getArea()); + } +} \ No newline at end of file diff --git a/w4/Triangle.java b/w4/Triangle.java new file mode 100644 index 0000000..0489a3a --- /dev/null +++ b/w4/Triangle.java @@ -0,0 +1,43 @@ +/** + * 三角形类,继承Shape,实现面积计算 + */ + public class Triangle extends Shape { + // 底 + private double base; + // 高 + private double height; + /** + * 无参构造 + */ + public Triangle() {} + /** + * 带参构造,初始化底和高 + * @param base 底 + * @param height 高 + */ + public Triangle(double base, double height) { + this.base = base; + this.height = height; + } + /** + * 实现父类抽象方法,计算三角形面积:底×高/2 + * @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; + } + } \ No newline at end of file diff --git a/w4/实验报告.docx b/w4/实验报告.docx new file mode 100644 index 0000000..1980ac8 Binary files /dev/null and b/w4/实验报告.docx differ diff --git a/w4/运行输出.jpg b/w4/运行输出.jpg new file mode 100644 index 0000000..4ee2fd7 Binary files /dev/null and b/w4/运行输出.jpg differ