如何使用以Object作为参数的方法正确实现接口?

时间:2019-02-26 22:09:32

标签: java object interface

我正在写一个教授给我们做的作业的程序。

我有一个名为Car的类,它有两个私有真实成员xy,它们应该表示汽车在坐标平面中的坐标,我想实现名为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类中正确实现此方法? 我已经尝试了一些方法,但是似乎都没有解决。感谢您提供任何帮助,因为我对面向对象的编程非常陌生。预先感谢。

1 个答案:

答案 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接口。