为什么equals()
中的java.util.Comparator
方法是抽象的,如果它已经在Object
类中实现了?
答案 0 :(得分:4)
首先,值得注意的是该方法并非“抽象化”。如果您在未实施Comparator<T>
的情况下实施equals()
,则代码将编译。您的课程将简单地使用Object
提供的实施。
至于为什么要重新声明方法,这是因为Comparator<T>.equals()
上的合同比Object.equals()
上的合同更严格。这在documentation:
此外,仅当指定的对象也是比较器并且它与此比较器施加相同的顺序时,此方法才能返回true。因此,comp1.equals(comp2)意味着每个对象引用o1和o2的sgn(comp1.compare(o1,o2))== sgn(comp2.compare(o1,o2))。
如果Comparator
未覆盖equals()
,则无法指定其equals()
上的合同与Object
的合同不同。