【问题标题】:How to calculate area of child class from parent class如何从父类计算子类的面积
【发布时间】:2016-08-10 23:04:51
【问题描述】:

这是我的问题:

  1. 当我打印两个形状的 area 时,我得到 ellipse正确 区域,但是 @ 圈子 987654321@。为什么?

  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());
    }
 }

【问题讨论】:

    标签: java oop inheritance geometry


    【解决方案1】:

    Circle 类下的getArea() 方法中,您将返回Circle 下的area 的值。

    但是,您在 Ellipse 类下的 area 变量中计算结果。

    这样做: 改变

    private double area;
    

    protected double area;
    

    Circle 类下的getArea() 方法中:

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

      这是因为正如 Debanic 所述,您已将 Ellipse访问修饰符 声明为 private。所以当你是Inheritingprivate 变量area 不会被DerivedCircle 继承。那么这里发生了什么?

      您的Circle.getArea() 正在返回您的Circlearea 变量。这是0。 所以最好将Ellipsearea 实例变量声明为protected。并从Circle 类中调用super.getArea()。上面的答案是如何说明的。您也可以放置 no 访问修饰符,但如果您的子类位于不同的包中,这将是一个问题。

      2) 我有多个圆半径。如何继续将其添加到由先前半径计算的区域(简而言之,我需要将所有半径的面积相加)。3)每当我通过圆半径时,我还需要圆区域(由半径计算)也应该添加到椭圆区域。

      我不会给你写完整的代码,但会给出一个可以帮助你的提示。因此,您希望继续将由 Circle 的 radiusEllipseaxis1,axis2 计算得出的 area 添加到单个 area

      在您的代码中,实现目标(每次都将区域添加到单个区域)的障碍在于

      每次您使用 new 关键字调用构造函数时,您基本上是在创建一个全新的对象,因此在某种程度上,区域的值正在获取 reset

      您希望您的 area 变量对所有对象都通用(共享)。您可以通过将其声明为static variable 来做到这一点。 那么area的值会在你每次操作的时候不断更新!

      【讨论】:

        猜你喜欢
        • 2015-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-12
        • 2018-05-24
        • 2011-08-12
        相关资源
        最近更新 更多