![](/img/trans.png)
[英]Implement a parameterized interface method that has a parameterized class argument with a concrete class
[英]How do I correctly implement an interface with a method that has Object as an argument?
我正在写一个教授给我们做的作业的程序。
我有一个名为Car
的类,它具有两个私有实成员x
和y
,它们分别表示汽车在坐标平面中的坐标,并且我想实现一个名为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.