繁体   English   中英

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

[英]How do I correctly implement an interface with a method that has Object as an argument?

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

我有一个名为Car的类,它具有两个私有实成员xy ,它们分别表示汽车在坐标平面中的坐标,并且我想实现一个名为MyInterface的接口,在其中我声明了一个方法public boolean compare(Object t) 据说它必须是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类中正确实现此方法? 我已经尝试了一些方法,但是似乎都没有解决。 感谢您提供任何帮助,因为我对面向对象的编程非常陌生。 提前致谢。

如果必须具有Object作为compare的参数类型,则必须测试传入的参数的类以确保它首先是Car

在您的Car类中将compare参数更改为Object 然后@Override批注将确定该方法正确覆盖了实例方法,并且不会出现编译器错误。 使用instanceof运算符确定t是否为Car 如果它不是Car ,或者它为null ,则可以决定引发IllegalArgumentException 然后,您可以将其转换为Car并继续执行方法的逻辑。

即使必须将Object用作类,一般而言,更好的方法是使用泛型。 在这里,这将回答这个问题:“这是什么类媲美 ?”。 如果您已经介绍了泛型,则可以理解定义为MyInterface<T> compare方法将采用类型T的参数。 这样就可以实现在方法Car用类型的参数Car ,提供Car implements MyInterface<Car> 这类似于Java内置的现有Comparable接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM