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



我不明白我哪里出错了。它看起来工作正常,直到我到达最后一个调用,三角形的面积返回为 100 而不是 50。我认为这是正确的,因为类 Field 的变量 hold 被分配给对象三角形的 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());
    }
  }

在三角形中,你像这样覆盖面积函数:

   @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"。

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

你从 Triangle.area() 返回一个错误的值:你忘了将结果除以 2。

此外,您不需要定义属性dim1dim2 Triangle:它只会增加混乱。

相关内容

  • 没有找到相关文章

最新更新