5 changed files with 111 additions and 0 deletions
@ -0,0 +1,23 @@ |
|||
/** |
|||
* 圆:面积 = π * r² |
|||
*/ |
|||
public class Circle extends Shape { |
|||
|
|||
private final double radius; |
|||
|
|||
public Circle(double radius) { |
|||
if (radius <= 0) { |
|||
throw new IllegalArgumentException("半径必须为正数"); |
|||
} |
|||
this.radius = radius; |
|||
} |
|||
|
|||
public double getRadius() { |
|||
return radius; |
|||
} |
|||
|
|||
@Override |
|||
public double getArea() { |
|||
return Math.PI * radius * radius; |
|||
} |
|||
} |
|||
@ -0,0 +1,29 @@ |
|||
/** |
|||
* 矩形:面积 = 宽 * 高 |
|||
*/ |
|||
public class Rectangle extends Shape { |
|||
|
|||
private final double width; |
|||
private final double height; |
|||
|
|||
public Rectangle(double width, double height) { |
|||
if (width <= 0 || height <= 0) { |
|||
throw new IllegalArgumentException("宽和高必须为正数"); |
|||
} |
|||
this.width = width; |
|||
this.height = height; |
|||
} |
|||
|
|||
public double getWidth() { |
|||
return width; |
|||
} |
|||
|
|||
public double getHeight() { |
|||
return height; |
|||
} |
|||
|
|||
@Override |
|||
public double getArea() { |
|||
return width * height; |
|||
} |
|||
} |
|||
@ -0,0 +1,10 @@ |
|||
/** |
|||
* 图形抽象基类:统一多态入口,具体面积由子类实现。 |
|||
*/ |
|||
public abstract class Shape { |
|||
|
|||
/** |
|||
* @return 图形面积(具体单位由子类语义决定,如平方厘米) |
|||
*/ |
|||
public abstract double getArea(); |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
/** |
|||
* 演示:多态 —— 同一 {@link ShapeUtil#printArea(Shape)} 处理圆、矩形、三角形。 |
|||
* 运行:javac *.java 后执行 java ShapeCalculatorDemo |
|||
*/ |
|||
public class ShapeCalculatorDemo { |
|||
|
|||
public static void main(String[] args) { |
|||
Shape circle = new Circle(3.0); |
|||
Shape rectangle = new Rectangle(4.0, 5.0); |
|||
Shape triangle = new Triangle(6.0, 4.0); |
|||
|
|||
System.out.println("—— 圆 ——"); |
|||
ShapeUtil.printArea(circle); |
|||
|
|||
System.out.println("—— 矩形 ——"); |
|||
ShapeUtil.printArea(rectangle); |
|||
|
|||
System.out.println("—— 三角形 ——"); |
|||
ShapeUtil.printArea(triangle); |
|||
|
|||
System.out.println("—— 多态数组统一处理 ——"); |
|||
Shape[] shapes = {circle, rectangle, triangle}; |
|||
for (Shape s : shapes) { |
|||
ShapeUtil.printArea(s); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,22 @@ |
|||
/** |
|||
* 图形工具类:通过多态统一打印任意 {@link Shape} 的面积。 |
|||
*/ |
|||
public final class ShapeUtil { |
|||
|
|||
private ShapeUtil() { |
|||
// 工具类禁止实例化
|
|||
} |
|||
|
|||
/** |
|||
* 打印给定图形的面积(保留两位小数,便于实验输出阅读)。 |
|||
* |
|||
* @param shape 任意 {@link Shape} 子类实例,可为 null(将给出提示) |
|||
*/ |
|||
public static void printArea(Shape shape) { |
|||
if (shape == null) { |
|||
System.out.println("图形引用为空,无法计算面积。"); |
|||
return; |
|||
} |
|||
System.out.printf("该图形的面积为:%.2f%n", shape.getArea()); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue