为什么对继承对象的最后一次调用似乎传递了 100 而不是 50?
Why does the last call to inherited object appear to pass 100 instead of 50?
我不明白我哪里做错了。它看起来工作正常,直到我到达最后一个调用,其中三角形的面积返回为 100 而不是 50。我认为这工作正常,因为 class 字段的变量 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());会打印你一次
"Area of triangle is 50" 然后它将获取 return 值并打印 "b area 100".
您还需要更改 return 值的计算。
您 return 来自 Triangle.area()
的错误值:您忘记将结果除以 2。
此外,您不需要在 Triangle
中定义属性 dim1
或 dim2
:这只会增加混乱。
我不明白我哪里做错了。它看起来工作正常,直到我到达最后一个调用,其中三角形的面积返回为 100 而不是 50。我认为这工作正常,因为 class 字段的变量 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());会打印你一次 "Area of triangle is 50" 然后它将获取 return 值并打印 "b area 100".
您还需要更改 return 值的计算。
您 return 来自 Triangle.area()
的错误值:您忘记将结果除以 2。
此外,您不需要在 Triangle
中定义属性 dim1
或 dim2
:这只会增加混乱。