抽象类的静态方法

时间:2020-04-14 18:31:41

标签: java

我有抽象类Figures和2个继承者。三角形,正方形和矩形。 我需要创建一个静态方法,该方法将使用图形数组并返回其面积之和。

abstract class Figure {

abstract double calculatePerimeter();

    abstract double calculateArea()

public class Rectangle extends Figure {
    double a;
    double b;

    public Rectangle(double a, double b) {
        this.a = a;
        this.b = b;
    }

    @Override
    double calculatePerimeter() {
        return 2 * (a + b);
    }

    @Override
    double calculateArea() {
        return a * b;
    }
}
public class Triangle extends Figure {
    double a;
    double b;
    double c;

    public Triangle(double a, double b, double c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    @Override
    double calculatePerimeter() {
        return a + b + c;
    }

    @Override
    double calculateArea() {
        double p = calculatePerimeter() / 2.0;
        return Math.sqrt(p * (p - a) * (p - b) * (p - c));
    }

所以我应该创建一个数字列表并在方法中使用,但这不起作用

Figure[] figures=new Figure[3];
figures[1]=new Square(4.6);
figures[2]=new Rectangle(4.5,5.2);
figures[3]=new Triangle(6,5,2.2);
 public static double findSquare(????????) {
        return square.calculateArea() + rectangle.calculateArea() + triangle.calculateArea();

它应该如何工作?我应该阅读哪个主题? 请解释

2 个答案:

答案 0 :(得分:1)

由于您使用继承并且在每个子图(正方形,矩形,三角形)上实现了calculateArea,因此您要做的就是遍历图数组并对所有calculateArea求和数字:

public static double findSquare(Figure[] arr) {
    double sum = 0;
    for (int i : arr) { 
        sum = sum + arr[i].calculateArea();
    }
    return sum;

注意:我真的认为您应该阅读并了解如何使用Java InheritanceArrays

答案 1 :(得分:0)

您应该在数组上循环/流式处理,然后通过调用多态方法calculateArea将每个元素映射到面积值,最后求和。

java流示例:

double sumOfArea = Arrays.stream(arrayOfFigure).mapToDouble(Figure::calculateArea).sum()