【案例4-7】图形的面积与周长计算程序
欢迎点赞关注收藏
【案例介绍】
- 案例描述
长方形和圆形都属于几何图形,都有周长和面积,并且它们都有自己的周长和面积计算公式。使用抽象类的知识设计一个程序,可以计算不同图形的面积和周长。
- 运行结果
【案例分析】
(1)定义父类Shape作为抽象类,并在类中定义抽象方法求周长和面积。
(2)定义Shape子类圆形(circle),具有半径属性和常量PI,同时必须实现父类中的抽象方法。
(3)定义Shape子类长方形(rectangle),具有长和宽的属性,同时必须实现父类的抽象方法。
(4)创建图形面积周长计算器(ShapeCalculate),具有计算不同图形面积和周长的方法。
(5)创建测试类TestShape类,在其main()方法中对ShapeCalculate计算面积和周长方法进行测试。
【案例实现】
Shape.java
- public abstract class Shape {
- // 抽象方法: 获取面积
- public abstract double getArea();
- // 抽象方法:获取周长
- public abstract double getPerimeter();
- }
上述代码中,在Shape类中定义了面积和周长的抽象方法。
Cirle.java
- public class Circle implementsShape {
- private double radius = 0; // 圆的半径
- private final static double PI = 3.14; // 常量,圆周率
- // 有参构造,初始化圆半径
- public Circle(double radius) {
- this.radius = radius;
- }
- // 求圆面积
- public double getArea() {
- return PI*radius*radius;
- }
- // 求圆周长
- public double getPerimeter() {
- return 2*radius*PI;
- }
- }
上述代码中,定义了圆形Circle类并继承了Shape类,再Circle类中重写了Shape中的getArea()和getPerimeter()方法,分别计算圆的面积和周长。
Rectangle.java
- public class Rectangle implements Shape {
- private double length = 0; // 长方形的长
- private double width = 0; // 长方形的宽
- // 有参构造,初始化长方形的长和宽
- public Rectangle(double length, double width) {
- super();
- this.length = length;
- this.width = width;
- }
- public double getArea() {
- return this.length*this.width;
- }
- public double getPerimeter() {
- return 2*(this.length+this.width);
- }
- }
上述代码中,定义了长方形Rectangle类并继承了Shape类,再Circle类中重写了Shape中的getArea()和getPerimeter()方法,分别计算长方形的面积和周长。
ShapeCaculate.java
- public class ShapeCaculate {
- // 可以计算任意shape子类的面积
- public void calArea (Shape shape) {
- System.out.println(shape.getArea());
- }
- // 可以计算任意shape子类的周长
- public void calPerimeter(Shape shape) {
- System.out.println(shape.getPerimeter());
- }
- }
创建了图形面积周长计算器ShapeCalculate类,calArea ()方法用来计算不同图形面积,calPerimeter()方法用来计算不同图形的周长。
TestShape.java
- public class TestShape {
- public static void main(String[] args) {
- // 创建图形计算器
- ShapeCaculate sc = new ShapeCaculate();
- // 创建长方形和圆形对象
- Shape rectangle = new Rectangle(3, 4); // <-------多态
- Circle circle = new Circle(3);
- // 求长方形和圆形的面积
- System.out.println("长方形的面积:");
- sc.calArea(rectangle);
- System.out.println("圆形的面积:");
- sc.calArea(circle);
- // 求长方形和圆形的周长
- System.out.println("长方形的周长:");
- sc.calPerimeter(rectangle);
- System.out.println("圆形的周长:");
- sc.calPerimeter(circle);
- }
- }
在上述代码中,分别创建了一个圆形circle对象和一个长方形rectangle对象,然后分别计算了圆形和长方形的面积和周长。