好的,我来帮助你实现这个需求。我们可以创建一个抽象类 `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 小助理,如未能正确解答您的问题,请继续追问。 |