鱼C论坛

 找回密码
 立即注册
查看: 110|回复: 1

[已解决]java

[复制链接]
发表于 2024-10-10 22:35:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
定义一个抽象类Shape,类中封装属性name指定图形名称,定义用于求面积的抽象方法。定义3个子类:圆形类Circle、梯形类Trapezoid和三角形类Triangle,都继承Shape类,子类中各自新增属性,定义构造方法、设置属性值的方法并重写shape类中的方法。在Circle类和Triangle类中还新增求周长的方法。在主类中定义Shape类的对象,创建子类对象,设置其属性值,并输出其面积与周长,在程序中要体现上转型对象的使用。
最佳答案
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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 17:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表