我正在尝试在eclipse中运行一个使用名为getArea(对象)的方法的代码。我目前收到错误说
类型
的方法getArea(ComparableRectangle)
RectangleTest
未定义
这是RectangleTest的代码 -
package geometry;
import java.awt.Rectangle;
public class RectangleTest extends Rectangle {
/**
*
*/
private static final long serialVersionUID = -3282103336310735942L;
public static void main(String args[]) {
ComparableRectangle rect01 = new ComparableRectangle(5, 4);
ComparableRectangle rect02 = new ComparableRectangle(6, 8);
System.out.println("Area: " + getArea(rect01));
}
}
这是ComparableRectangle的代码。
package geometry;
import java.awt.Rectangle;
public class ComparableRectangle extends Rectangle implements Comparable {
private int width;
private int height;
public ComparableRectangle(int w, int h) {
width = w;
height = h;
}
public double getArea(ComparableRectangle rect) {
return width*height;
}
public boolean compareTo(ComparableRectangle rect1, ComparableRectangle rect2) {
if(rect1.width == rect2.width && rect1.height == rect2.height) {
return true;
}
else {
return false;
}
}
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}
}
如何澄清rect01是ComparableRectangle?
答案 0 :(得分:0)
在面向对象的语言(如Java
或C++
)中调用类方法需要该类的实例,我们也称之为从该类实例化的object
。所以你必须像下面这样调用你的方法: -
rect02.getArea(rect01);
rect01.getArea(rect02);
因为getArea(ComparableRectangle rect)
是类ComparableRectangle
的成员函数或方法,所以你需要它的实例来调用它。以下是该类rect01和rect02的两个实例。
答案 1 :(得分:0)
你误解了方法及其参数的工作原理。
您需要某种方法将该方法与应该调用的某个对象相结合。目前,您可以使用object作为参数,但这不正确。
您应该通过编写
来组合对象和方法obj.method();
因此,您应该调用类似
的方法rect01.getArea();
并从方法中删除参数
public double getArea() { ... }
参数可用于为方法提供有关方法的附加信息。一个很好的例子是compareTo
方法,它应该将当前实例与给定实例进行比较。通话看起来像
rect01.compareTo(rect02);
并且方法签名是
public int compareTo(Object o)
请注意,它只有一个参数,因为方法隐含了当前实例(this
关键字)。
不需要额外的自定义compareTo
方法,顺便说一下,该方法应该命名为compare
,并且应该是static
,因为它没有绑定到任何实例。
另请注意,您的自定义compareTo
方法无法比较。它只返回相同或不相同。但是对于订单,您需要小于,大于且等于。因此,您的方法无法定义订单。