做个开心的码农 发表于 2024-10-10 22:35:42

java

定义一个抽象类Shape,类中封装属性name指定图形名称,定义用于求面积的抽象方法。定义3个子类:圆形类Circle、梯形类Trapezoid和三角形类Triangle,都继承Shape类,子类中各自新增属性,定义构造方法、设置属性值的方法并重写shape类中的方法。在Circle类和Triangle类中还新增求周长的方法。在主类中定义Shape类的对象,创建子类对象,设置其属性值,并输出其面积与周长,在程序中要体现上转型对象的使用。

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: java