我不明白我哪里出错了。它看起来工作正常,直到我到达最后一次调用,其中三角形区域返回为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());
}
}
答案 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
中定义属性dim2
或Triangle
:它只会增加混乱。