为什么对继承对象的最后一次调用似乎传递100而不是50?

时间:2015-01-07 10:04:32

标签: java inheritance

我不明白我哪里出错了。它看起来工作正常,直到我到达最后一次调用,其中三角形区域返回为100而不是50.我认为这是正常的,因为类字段的变量保持被分配给b,这是对象三角形。请帮我解释一下我的术语,并了解这段代码出错的地方。

public class Figure {
    double dim1;
    double dim2;

  Figure(double a, double b){
        dim1 = a;
        dim2 = b;
    }

 double area(){
     System.out.println("Area of shape is " + dim1*dim2);
    return  dim1*dim2; 
    }
}

public class Triangle extends Figure{
    double dim1;
    double dim2;

    Triangle(double a,double b){
       super(a,b);
        dim1 = a;
        dim2=b;
    }

    @Override

   double area(){
     System.out.println("Area of triangle is " + dim1*dim2/2);
    return  dim1*dim2; 
    }

}
public class RunFigure {
    public static void main(String[] args) {      
      Figure a = new Figure(10,10);
      a.area();

      Triangle b = new Triangle(10,10);
      b.area();

      Figure holder;

      holder = a;
      System.out.println("a area " + holder.area());

      holder = b;
      System.out.println("b area "  + holder.area());
    }
  }

2 个答案:

答案 0 :(得分:2)

在Triangle中,你像这样覆盖了区域功能:

   @Override
   double area(){
       System.out.println("Area of triangle is " + dim1*dim2/2); // should print 50
       return  dim1*dim2; // will return 100
    }

和System.out.println(" b area" + holder.area());会给你打印一次 "三角形面积为50"然后它将获取返回值并打印" b区域100"。

您还需要更改返回值的计算。

答案 1 :(得分:0)

您从Triangle.area()返回错误的值:您忘记将结果除以2。

此外,您不需要在dim1中定义属性dim2Triangle:它只会增加混乱。