java如何用一个以Object为参数的方法正确实现接口?
我正在写教授给我们的家庭作业
我有一个名为Car
的类,它有两个私有实数成员x
和y
,它们应该代表汽车在坐标平面上的坐标,我想实现一个名为MyInterface
的接口,在这个接口中我声明了一个方法public boolean compare(Object t)
。有人说它必须是Object t
,而不是其他东西,这样我就可以在多个类中实现接口(家庭作业的一部分)。Java是有争议的编程语言
代码中有问题的部分如下所示:
public interface MyInterface {
public boolean compare(Object t);
}
public class Car implements MyInterface{
private double x, y;
@Override
public boolean compare(Car t) {
double curdist = Math.sqrt(this.x*this.x + this.y*this.y);
double givdist = Math.sqrt(t.x*t.x + t.y*t.y);
if(curdist < givdist) return true;
else return false;
}
}
我的方法compare
需要计算当前车辆和给定车辆从点(0,0)的距离,并比较这两个距离。如果当前汽车的距离(curdist
)更接近给定汽车的距离(givdist
)到(0,0),compare
返回true,否则返回false
我的问题是,我如何在课堂上正确地实现这个方法? 我试过几件事,但似乎都不管用。非常感谢您的帮助,因为我对面向对象编程非常陌生。提前谢谢
# 1 楼答案
如果必须将
Object
作为compare
的参数类型,那么必须先测试传入的参数的类,以确保它是Car
在
Car
类中将compare
参数更改为Object
。然后@Override
注释将确定该方法正确地重写了实例方法,并且不会出现编译器错误。使用instanceof
运算符确定t
是否为Car
。如果一个IllegalArgumentException
不是Car
,或者如果它是null
,你可以决定抛出它。然后您可以将其转换为Car
,并继续使用方法的逻辑即使你必须为你的类花费
Object
,通常更好的方法是使用泛型。在这里,这将回答一个问题:“这个类与和有什么可比性?”。如果您已经介绍了泛型,那么您可能会理解一个定义为MyInterface<T>
的类。compare
方法将采用T
类型的参数。这允许您使用Car
类型的参数来实现Car
中的方法,前提是Car implements MyInterface<Car>
。这类似于Java内置的现有Comparable
接口