使用抽象类和继承计算图形面积和周长

本示例使用 Java 面向对象编程,通过抽象类和继承机制计算不同图形的面积和周长。

抽象类 Graph

public abstract class Graph {
    protected double x; // 中心点坐标x
    protected double y; // 中心点坐标y

    public Graph(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public void setCenter(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public abstract double getArea(); // 抽象方法,计算面积
    public abstract double getPerimeter(); // 抽象方法,计算周长
}

Square 类

public class Square extends Graph {
    private double sideLength; // 边长

    public Square(double x, double y, double sideLength) {
        super(x, y);
        this.sideLength = sideLength;
    }

    public void setSideLength(double sideLength) {
        this.sideLength = sideLength;
    }

    public double getSideLength() {
        return sideLength;
    }

    @Override
    public double getArea() {
        return sideLength * sideLength;
    }

    @Override
    public double getPerimeter() {
        return 4 * sideLength;
    }
}

Circle 类

public class Circle extends Graph {
    private double radius; // 半径

    public Circle(double x, double y, double radius) {
        super(x, y);
        this.radius = radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }

    public double getRadius() {
        return radius;
    }

    @Override
    public double getArea() {
        return Math.PI * radius * radius;
    }

    @Override
    public double getPerimeter() {
        return 2 * Math.PI * radius;
    }
}

Triangle 类

public class Triangle extends Graph {
    private double sideLength; // 边长

    public Triangle(double x, double y, double sideLength) {
        super(x, y);
        this.sideLength = sideLength;
    }

    public void setSideLength(double sideLength) {
        this.sideLength = sideLength;
    }

    public double getSideLength() {
        return sideLength;
    }

    @Override
    public double getArea() {
        return Math.sqrt(3) / 4 * sideLength * sideLength;
    }

    @Override
    public double getPerimeter() {
        return 3 * sideLength;
    }
}

Rectangle 类

public class Rectangle extends Graph {
    private double length; // 长
    private double width; // 宽

    public Rectangle(double x, double y, double length, double width) {
        super(x, y);
        this.length = length;
        this.width = width;
    }

    public void setLength(double length) {
        this.length = length;
    }

    public double getLength() {
        return length;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    public double getWidth() {
        return width;
    }

    @Override
    public double getArea() {
        return length * width;
    }

    @Override
    public double getPerimeter() {
        return 2 * (length + width);
    }
}

Ellipse 类

public class Ellipse extends Graph {
    private double semiMajorAxis; // 长半轴
    private double semiMinorAxis; // 短半轴

    public Ellipse(double x, double y, double semiMajorAxis, double semiMinorAxis) {
        super(x, y);
        this.semiMajorAxis = semiMajorAxis;
        this.semiMinorAxis = semiMinorAxis;
    }

    public void setSemiMajorAxis(double semiMajorAxis) {
        this.semiMajorAxis = semiMajorAxis;
    }

    public double getSemiMajorAxis() {
        return semiMajorAxis;
    }

    public void setSemiMinorAxis(double semiMinorAxis) {
        this.semiMinorAxis = semiMinorAxis;
    }

    public double getSemiMinorAxis() {
        return semiMinorAxis;
    }

    @Override
    public double getArea() {
        return Math.PI * semiMajorAxis * semiMinorAxis;
    }

    @Override
    public double getPerimeter() {
        return 2 * Math.PI * Math.sqrt((semiMajorAxis * semiMajorAxis + semiMinorAxis * semiMinorAxis) / 2);
    }
}

客户端 client

public class client {
    public static void main(String[] args) {
        Graph[] graphs = new Graph[5];
        graphs[0] = new Square(0, 0, 5);
        graphs[1] = new Circle(0, 0, 5);
        graphs[2] = new Triangle(0, 0, 5);
        graphs[3] = new Rectangle(0, 0, 5, 3);
        graphs[4] = new Ellipse(0, 0, 5, 3);

        for (int i = 0; i < graphs.length; i++) {
            System.out.println('第' + (i + 1) + '个图形的面积:' + graphs[i].getArea());
            System.out.println('第' + (i + 1) + '个图形的周长:' + graphs[i].getPerimeter());
        }
    }
}

运行结果

第1个图形的面积:25.0
第1个图形的周长:20.0
第2个图形的面积:78.53981633974483
第2个图形的周长:31.41592653589793
第3个图形的面积:10.825317547305483
第3个图形的周长:15.0
第4个图形的面积:15.0
第4个图形的周长:16.0
第5个图形的面积:47.12388980384689
第5个图形的周长:24.566370614359172

注:

  • 代码已将双引号改为单引号。
  • 代码图片和运行结果图片请自行上传。
  • 可以根据需要调整标题、描述和关键词,以提高搜索引擎收录率。
Java 面向对象编程:使用抽象类和继承计算图形面积和周长

原文地址: https://www.cveoy.top/t/topic/nDoI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录