6

我们知道,如果要创建该类的对象,则必须实现接口的所有方法。但是为什么不需要在java中同时实现方法compare()equals()接口呢?Comparator

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

4

3 回答 3

7

由于所有类都隐式扩展了 a 的Object每个实现Comparator都有一个 equals 方法,因为每个Object都有一个。

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

 public interface ToString {
      public String toString();
 }

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

当您查看该类时,它会说“实现 ToString”,这是真的,不是吗?

于 2013-10-25T06:45:25.810 回答
3

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

于 2013-10-25T06:45:39.787 回答
2

每个对象都隐含地具有来自 Object 的等号(因为每个对象都是 Object 的子类型) - 由于它是一个方法,因此标准的 Java 多态性接管了。


现在,施加了一个额外的限制,这就是为什么它被指定为接口的一部分。Comparator#equals

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

但是,由于coverse 必须是真实的,因此不重载equals不会破坏新要求。

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

于 2013-10-25T06:47:21.063 回答