一个简单的图形计算器程序(包含矩形和圆形的周长和面积计算)

这是Shape类中的代码。它一个抽象类,它定义了两个图形的基本方法 getPerimeter() 和 getArea()。

public abstract  class Shape {
    //定义一个用于计算周长的方法
    public  abstract double getPerimeter();
    //定义一个用于计算面积的方法
    public  abstract double getArea();
    
}

这是rec类中的代码。rec 是一个矩形类,它继承自父类 Shape,并重写了父类的抽象方法。rec 有两个私人属性:chang(长)和 kuan(宽),可以通过 setChang() 和 setKuan() 方法设置它们的值。(注:重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值形参都不能改变。)

public  class rec extends Shape{
    private double chang;
    private double kuan;

    public double getChang() {
        return chang;
    }

    public void setChang(double chang) {
        this.chang = chang;
    }

    public double getKuan() {
        return kuan;
    }

    public void setKuan(double kuan) {
        this.kuan = kuan;
    }

    @Override
    //计算矩形的周长
    public double getPerimeter() {
        return (chang+kuan)*2;
    }

    @Override
    //计算矩形的面积
    public double getArea() {
        return chang*kuan;
    }

}

这是rou中的代码。rou 是一个圆形类,它同样继承自父类Shape,并重写了父类的抽象方法。rou 有一个属性 r(半径),可以通过 setR() 方法设置它的值。

public  class rou extends Shape{
    private double r;

    public rou() {
        this.r = r;
    }

    public double getR() {
        return r;
    }

    public void setR(double r) {
        this.r = r;
    }

    @Override
    //计算圆的周长
    public double getPerimeter() {
        return 2*r*Math.PI;
    }

    @Override
    //计算圆的面积
    public double getArea() {
        return r*Math.PI;
    }
}

最后这是实现类。首先在begin() 方法中,如果传入的 shape 是 rec 类型,会将其向下转型为 rec 类型,并通过用户输入设置矩形的长和宽。然后调用 getPerimeter() 和 getArea() 方法获取周长和面积,并打印输出。(注:向下转型是指将父类对象强制转换为子类对象的过程。但它需要满足一个前提条件,即父类对象实际上是子类对象,如果不是则会导致ClassCastException 异常。而且向下转型会破坏了面向对象的封装性原则。父类对象通常是通过父类接口来操作的,而子类对象可能具有额外的属性和行为。当我们将父类对象向下转型为子类对象后,可能会无意中访问到子类特有的属性和方法。所以我们在写代码时应该进来避免使用向下转型,必要时可以使用instanceof运算符来判断对象的类型。)

在 main() 方法中,先通过用户输入获取想要计算的图形类型,然后使用 switch 语句根据用户输入创建对应的图形对象。如果用户输入的是 “圆形”,则创建一个 rou 对象,如果用户输入的是 “矩形”,则创建一个 rec 对象。然后调用 begin() 方法传入对应的图形对象进行计算和输出。

public class ShapeBegin {

    public static void begin(Shape shape) {
        Scanner input = new Scanner(System.in);
        if (shape instanceof rec) {

            System.out.println("请输入矩形的长:");
            double chang = input.nextInt();
            System.out.println("请输入矩形的宽:");
            double kuan = input.nextInt();
            //像下转型,父类转成子类(慎用)
            rec myrec = (java807.rec) shape;
            myrec.setChang(chang);
            myrec.setKuan(kuan);
            System.out.println("矩形的周长是:" + myrec.getPerimeter() + "矩形的面积是:" + myrec.getArea());

        } else if (shape instanceof rou) {
            System.out.println("请输入圆的半径:");
            double rou = input.nextInt();
            rou myrou = (java807.rou) shape;
            myrou.setR(rou);
            System.out.println("圆的周长是:" + myrou.getPerimeter() + "圆的面积是:" + myrou.getArea());


        }
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入形状:(圆形/矩形)");

        String xingzhuang = input.next();
        switch (xingzhuang) {
            case "圆形":
                Shape shape = new rou();
                begin(shape);

                break;

            case "矩形":
                Shape shapea = new rec();
                begin(shapea);
                break;
        }

    }
}

结果展示

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值