5 changed files with 209 additions and 0 deletions
@ -0,0 +1,43 @@ |
|||||
|
package com.trae.shape; |
||||
|
|
||||
|
/** |
||||
|
* 圆形类 |
||||
|
* 继承自Shape抽象类,实现了getArea()方法 |
||||
|
*/ |
||||
|
public class Circle extends Shape { |
||||
|
private double radius; // 圆的半径
|
||||
|
|
||||
|
/** |
||||
|
* 构造方法 |
||||
|
* @param radius 圆的半径 |
||||
|
*/ |
||||
|
public Circle(double radius) { |
||||
|
this.radius = radius; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取圆的半径 |
||||
|
* @return 圆的半径 |
||||
|
*/ |
||||
|
public double getRadius() { |
||||
|
return radius; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 设置圆的半径 |
||||
|
* @param radius 圆的半径 |
||||
|
*/ |
||||
|
public void setRadius(double radius) { |
||||
|
this.radius = radius; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 计算圆的面积 |
||||
|
* 面积公式:π * 半径² |
||||
|
* @return 圆的面积 |
||||
|
*/ |
||||
|
@Override |
||||
|
public double getArea() { |
||||
|
return Math.PI * radius * radius; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,43 @@ |
|||||
|
package com.trae.shape; |
||||
|
|
||||
|
/** |
||||
|
* 图形面积计算器测试类 |
||||
|
* 用于验证所有形状类和工具类的功能 |
||||
|
*/ |
||||
|
public class Main { |
||||
|
public static void main(String[] args) { |
||||
|
System.out.println("图形面积计算器测试\n"); |
||||
|
|
||||
|
// 1. 创建不同形状的实例
|
||||
|
Shape circle = new Circle(5.0); // 半径为5的圆
|
||||
|
Shape rectangle = new Rectangle(4.0, 6.0); // 长4宽6的矩形
|
||||
|
Shape triangle = new Triangle(3.0, 8.0); // 底3高8的三角形
|
||||
|
|
||||
|
// 2. 使用ShapeUtil统一打印面积
|
||||
|
System.out.println("=== 使用ShapeUtil工具类打印面积 ==="); |
||||
|
ShapeUtil.printArea(circle); |
||||
|
ShapeUtil.printArea(rectangle); |
||||
|
ShapeUtil.printArea(triangle); |
||||
|
|
||||
|
// 3. 演示多态特性
|
||||
|
System.out.println("\n=== 演示多态特性 ==="); |
||||
|
// 创建形状数组,可以统一处理不同类型的形状
|
||||
|
Shape[] shapes = {circle, rectangle, triangle}; |
||||
|
|
||||
|
for (Shape shape : shapes) { |
||||
|
ShapeUtil.printArea(shape); |
||||
|
} |
||||
|
|
||||
|
// 4. 验证属性访问和修改
|
||||
|
System.out.println("\n=== 验证属性访问和修改 ==="); |
||||
|
Circle myCircle = (Circle) circle; |
||||
|
System.out.println("圆的原始半径: " + myCircle.getRadius()); |
||||
|
System.out.println("圆的原始面积: " + myCircle.getArea()); |
||||
|
|
||||
|
myCircle.setRadius(10.0); // 修改半径
|
||||
|
System.out.println("修改后的半径: " + myCircle.getRadius()); |
||||
|
System.out.println("修改后的面积: " + myCircle.getArea()); |
||||
|
|
||||
|
System.out.println("\n=== 测试完成 ==="); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,62 @@ |
|||||
|
package com.trae.shape; |
||||
|
|
||||
|
/** |
||||
|
* 矩形类 |
||||
|
* 继承自Shape抽象类,实现了getArea()方法 |
||||
|
*/ |
||||
|
public class Rectangle extends Shape { |
||||
|
private double length; // 矩形的长
|
||||
|
private double width; // 矩形的宽
|
||||
|
|
||||
|
/** |
||||
|
* 构造方法 |
||||
|
* @param length 矩形的长 |
||||
|
* @param width 矩形的宽 |
||||
|
*/ |
||||
|
public Rectangle(double length, double width) { |
||||
|
this.length = length; |
||||
|
this.width = width; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取矩形的长 |
||||
|
* @return 矩形的长 |
||||
|
*/ |
||||
|
public double getLength() { |
||||
|
return length; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 设置矩形的长 |
||||
|
* @param length 矩形的长 |
||||
|
*/ |
||||
|
public void setLength(double length) { |
||||
|
this.length = length; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取矩形的宽 |
||||
|
* @return 矩形的宽 |
||||
|
*/ |
||||
|
public double getWidth() { |
||||
|
return width; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 设置矩形的宽 |
||||
|
* @param width 矩形的宽 |
||||
|
*/ |
||||
|
public void setWidth(double width) { |
||||
|
this.width = width; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 计算矩形的面积 |
||||
|
* 面积公式:长 × 宽 |
||||
|
* @return 矩形的面积 |
||||
|
*/ |
||||
|
@Override |
||||
|
public double getArea() { |
||||
|
return length * width; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
package com.trae.shape; |
||||
|
|
||||
|
/** |
||||
|
* 形状抽象类 |
||||
|
* 定义了所有形状都必须实现的面积计算方法 |
||||
|
*/ |
||||
|
public abstract class Shape { |
||||
|
/** |
||||
|
* 计算形状面积的抽象方法 |
||||
|
* @return 形状的面积 |
||||
|
*/ |
||||
|
public abstract double getArea(); |
||||
|
} |
||||
@ -0,0 +1,48 @@ |
|||||
|
package com.trae.shape; |
||||
|
|
||||
|
/** |
||||
|
* 形状工具类 |
||||
|
* 提供形状相关的工具方法 |
||||
|
*/ |
||||
|
public final class ShapeUtil { |
||||
|
/** |
||||
|
* 私有构造方法,防止实例化 |
||||
|
*/ |
||||
|
private ShapeUtil() { |
||||
|
// 工具类不允许实例化
|
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 打印形状的面积 |
||||
|
* @param shape 形状对象,可以是Circle、Rectangle或Triangle等任意Shape的子类 |
||||
|
*/ |
||||
|
public static void printArea(Shape shape) { |
||||
|
if (shape == null) { |
||||
|
System.out.println("形状对象不能为空"); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
String shapeType = getShapeTypeName(shape); |
||||
|
double area = shape.getArea(); |
||||
|
|
||||
|
// 格式化输出,保留两位小数
|
||||
|
System.out.printf("%s的面积是: %.2f\n", shapeType, area); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取形状类型的中文名称 |
||||
|
* @param shape 形状对象 |
||||
|
* @return 形状类型的中文名称 |
||||
|
*/ |
||||
|
private static String getShapeTypeName(Shape shape) { |
||||
|
if (shape instanceof Circle) { |
||||
|
return "圆形"; |
||||
|
} else if (shape instanceof Rectangle) { |
||||
|
return "矩形"; |
||||
|
} else if (shape instanceof Triangle) { |
||||
|
return "三角形"; |
||||
|
} else { |
||||
|
return "未知形状"; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue