为什么不必在Java中覆盖接口Comparator的两种方法

时间:2013-10-25 06:42:27

标签: java interface comparator

我们知道如果我们想要创建该类的对象,就必须实现接口的所有方法。但是为什么没有必要在java中实现接口compare()的方法equals()Comparator

我同意目的已经解决,但即使如此,如果我们覆盖equals(),为什么不强制覆盖compare()?

3 个答案:

答案 0 :(得分:7)

由于所有类都隐含地扩展Object Comparator的每个实现都有一个等于方法,因为每个Object都有一个。

如果使用toString()方法定义接口,那将是相同的。

 public interface ToString {
      public String toString();
 }

 public class SomeClass implements ToString {
     // toString implicitly implemented, because Object defines it
 }

当你看到它所说的“实现ToString”时,这是真的,不是吗?

答案 1 :(得分:2)

因为java.lang.Object已经覆盖了您可以创建的每个对象。

答案 2 :(得分:2)

每个对象都隐含有equals from Object(因为每个对象都是Object的子类型) - 因为它是虚拟方法,标准Java多态性接管。


现在,Comparator#equals 施加了额外的限制,这就是它被指定为界面的一部分的原因。

  

..只有当指定的对象也是比较器时,此方法才能返回true ,并且它与此比较器的顺序相同。

但是,由于反过来需要为真,因此不会重载equals并不会破坏新的要求。

  

请注意,不要覆盖Object.equals(Object)始终是安全的.. [因为那时不同的比较器实例永远不会相等]。