为什么java.util.Comparator中的equals()方法变得抽象?

为什么java.util.Comparator中的equals()方法变得抽象?,java,Java,为什么java.util.Comparator中的equals()方法变得抽象,如果它已经在对象类中实现了呢?首先,值得注意的是,该方法不是“抽象的”。如果在未实现equals()的情况下实现Comparator,则代码将编译。您的类将只使用对象提供的实现 至于为什么要重新声明该方法,这是因为Comparator.equals()上的契约比Object.equals()上的契约更严格。下文对此进行了解释: 此外,只有当指定的对象也是一个比较器并且它施加了与该比较器相同的顺序时,该方法才能返回tr

为什么
java.util.Comparator
中的
equals()
方法变得抽象,如果它已经在
对象
类中实现了呢?

首先,值得注意的是,该方法不是“抽象的”。如果在未实现
equals()
的情况下实现
Comparator
,则代码将编译。您的类将只使用
对象提供的实现

至于为什么要重新声明该方法,这是因为
Comparator.equals()
上的契约比
Object.equals()上的契约更严格。下文对此进行了解释:

此外,只有当指定的对象也是一个比较器并且它施加了与该比较器相同的顺序时,该方法才能返回true。因此,comp1.equals(comp2)意味着对于每个对象参考o1和o2,sgn(comp1.compare(o1,o2))==sgn(comp2.compare(o1,o2))


如果
Comparator
没有覆盖
equals()
,就没有好的方法来指定它在
equals()
上的契约与
对象的契约不同。

这是一个真实的、合法的问题,不应该关闭。你甚至可以使用更强硬的措辞:这是关于契约,而不仅仅是文档,接口是指定契约的工件。