我正在写一个教授给我们做的作业的程序。
我有一个名为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。
我的问题是,如何在Car类中正确实现此方法? 我已经尝试了一些方法,但是似乎都没有解决。感谢您提供任何帮助,因为我对面向对象的编程非常陌生。预先感谢。
答案 0 :(得分:3)
如果必须将Object
作为compare
的参数类型,则必须测试传入的参数的类以确保它首先是Car
。
在您的compare
类中将Object
自变量更改为Car
。然后,@Override
批注将确定该方法正确覆盖了实例方法,并且不会出现编译器错误。使用instanceof
运算符确定t
是否为Car
。如果不是IllegalArgumentException
,或者是Car
,则可以决定抛出null
。然后,您可以将其转换为Car
,然后继续执行方法的逻辑。
即使您必须让类使用Object
,一般而言,泛型也是更好的方法。在这里,这将回答以下问题:“该类与可比的是什么?”。如果您已经介绍了泛型,那么您可能会理解定义为MyInterface<T>
的类。 compare
方法将采用类型T
的参数。这允许您使用Car
提供的类型为Car
的参数在Car implements MyInterface<Car>
中实现该方法。这类似于Java内置的现有Comparable
接口。