我们知道如果我们想要创建该类的对象,就必须实现接口的所有方法。但是为什么没有必要在java中实现接口compare()
的方法equals()
和Comparator
?
我同意目的已经解决,但即使如此,如果我们覆盖equals
(),为什么不强制覆盖compare
()?
答案 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)始终是安全的.. [因为那时不同的比较器实例永远不会相等]。