我不明白我哪里出错了。它看起来工作正常,直到我到达最后一个调用,三角形的面积返回为 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。
此外,您不需要定义属性dim1
或dim2
Triangle
:它只会增加混乱。