|
发表于 2024-10-10 22:41:16
|
显示全部楼层
本楼为最佳答案
 好的,我来帮助你实现这个需求。我们可以创建一个抽象类 `Shape`,以及相应的子类 `Circle`、`Trapezoid` 和 `Triangle`。其中,`Circle` 和 `Triangle` 类会增加求周长的方法。然后在主类中使用上转型来处理这些对象。下面是代码示例:
- // 定义抽象类 Shape
- abstract class Shape {
- protected String name;
- public Shape(String name) {
- this.name = name;
- }
- // 抽象方法求面积
- public abstract double getArea();
- @Override
- public String toString() {
- return "Shape: " + name;
- }
- }
- // 定义圆形类 Circle
- class Circle extends Shape {
- private double radius;
- public Circle(double radius) {
- super("Circle");
- this.radius = radius;
- }
- @Override
- public double getArea() {
- return Math.PI * radius * radius;
- }
- public double getPerimeter() {
- return 2 * Math.PI * radius;
- }
- }
- // 定义梯形类 Trapezoid
- class Trapezoid extends Shape {
- private double base1, base2, height;
- public Trapezoid(double base1, double base2, double height) {
- super("Trapezoid");
- this.base1 = base1;
- this.base2 = base2;
- this.height = height;
- }
- @Override
- public double getArea() {
- return 0.5 * (base1 + base2) * height;
- }
- }
- // 定义三角形类 Triangle
- class Triangle extends Shape {
- private double base, height, sideA, sideB, sideC;
- public Triangle(double base, double height, double sideA, double sideB, double sideC) {
- super("Triangle");
- this.base = base;
- this.height = height;
- this.sideA = sideA;
- this.sideB = sideB;
- this.sideC = sideC;
- }
- @Override
- public double getArea() {
- return 0.5 * base * height;
- }
- public double getPerimeter() {
- return sideA + sideB + sideC;
- }
- }
- // 主类,定义主方法
- public class Main {
- public static void main(String[] args) {
- // 上转型创建 Circle 对象
- Shape circle = new Circle(5);
- System.out.println(circle.toString());
- System.out.println("Area: " + circle.getArea());
- // 向下转型以访问 Circle 的方法
- System.out.println("Perimeter: " + ((Circle) circle).getPerimeter());
- // 上转型创建 Trapezoid 对象
- Shape trapezoid = new Trapezoid(3, 4, 5);
- System.out.println(trapezoid.toString());
- System.out.println("Area: " + trapezoid.getArea());
- // 上转型创建 Triangle 对象
- Shape triangle = new Triangle(3, 4, 3, 4, 5);
- System.out.println(triangle.toString());
- System.out.println("Area: " + triangle.getArea());
- // 向下转型以访问 Triangle 的方法
- System.out.println("Perimeter: " + ((Triangle) triangle).getPerimeter());
- }
- }
复制代码
在这个例子中,为每个子类都提供了计算面积的方法,并在 `Circle` 和 `Triangle` 类中增加了计算周长的方法。在主类 `Main` 中,通过上转型的方式创建子类对象,并在需要时使用向下转型来调用特定子类的方法。如果有更多问题需要解答,请随时告知!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|