一个简单的图形计算器程序(包含矩形和圆形的周长和面积计算)
这是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;}}
}
结果展示



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
