如何从父类计算子类的面积

3

以下是我的问题:

  1. 当我打印出两个形状的面积时,我得到了椭圆的正确面积,但圆形的面积为0。为什么?

  2. 我有多个圆的半径。如何将其添加到先前计算出的面积中,以便将所有半径的面积相加?

  3. 每当我传递圆的半径时,我也需要将由该半径计算出的圆的面积添加到椭圆的面积中。如何做到这一点?

这是我的当前代码:

public class Ellipse {
    private double area;
    private double axis1;
    private double axis2;

    public Ellipse() {
        area = 0;
    }

    public Ellipse (double axis1, double axis2) {
        this.axis1 = axis1;
        this.axis2 = axis2;
    }

    public void calculateArea() {
        area += axis1 * axis2;
    }

    public double getArea() {
        return area;
    }
}

public class Circle extends Ellipse {
    private double radius;
    private double area;

    public Circle(){
        area = 0;
    }

    public Circle(double radius) {
        super(radius, radius);
    } 

    public double getArea() {
        return area;
    }
}

public class Driver {
    public static void main (String args[]) {
        Ellipse ellipse = new Ellipse(10, 20);
        ellipse.calculateArea();
        Circle circle = new Circle(50);
        circle.calculateArea();
        System.out.println("Area of Circle is : " + ellipse.getArea());
        System.out.println("Area of Circle is : " + circle.getArea());
    }
 }
2个回答

0

1) 当我打印两个形状的面积时,我得到了椭圆的正确面积,但是我得到的圆的面积为零。为什么?

这是因为正如Debanic所说,您已将Ellipse的访问修饰符声明为private。因此,在继承时,派生类Circle不会继承私有变量area。那么这里发生了什么?

您的Circle.getArea()返回的是Circle类的area变量。这是0。因此,最好将Ellipse类的area实例变量声明为protected。并从Circle类调用super.getArea()。就像上面的答案所述一样。您也可以不使用访问修饰符,但如果子类在不同的包中,则会出现问题。

2) 我有多个圆的半径。我该如何将其添加到面积中,这是由先前半径计算出来的(简而言之,我需要对所有半径的面积求和)。3)每当我传递圆的半径时,我还需要将由半径计算出的圆形面积添加到椭圆形面积中。

我不会为您编写整个代码,但会给出提示以帮助您解决问题。因此,您想要不断添加由圆的半径椭圆形轴1、轴2计算出的面积到单个面积中。

在您的代码中,阻碍您实现目标(每次将面积添加到单个面积中)的障碍在于:

每次使用new关键字调用构造函数时,您基本上正在创建一个全新的对象,因此面积的值被重置

您希望您的area变量对所有对象都是公共(共享)的。您可以通过将其声明为静态变量来实现这一点。 然后,每次对其进行操作时,area的值将不断更新!


0
在你的Circle类下的getArea()方法中,你返回了Circlearea的值。
然而,你在Ellipse类下的area变量中计算结果。
请这样做: 更改

private double area;

protected double area;

在你的Circle类下的getArea()方法中:

public double getArea(){
    return super.area;
}

希望这能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接