为什么不必在Java中覆盖接口Comparator的两种方法
我们知道,如果我们想要创建该类的对象,则必须实现接口的所有方法。 但是为什么没有必要在java中实现接口Comparator
compare()
和equals()
方法呢?
我同意目的已经解决,但即使那样,如果我们覆盖compare
(),为什么不强制重写equals
()?
由于所有类都隐式地扩展了Object
,因此Comparator
每个实现都有一个equals方法,因为每个Object
都有一个。
如果使用toString()方法定义接口,则相同。
public interface ToString { public String toString(); } public class SomeClass implements ToString { // toString implicitly implemented, because Object defines it }
当你看到它所说的“实现ToString”时,这是真的,不是吗?
因为它已经被您可以创建的每个对象上的java.lang.Object
覆盖。
每个对象都隐式地具有来自Object的equals (因为每个对象都是Object的子类型) – 并且因为它是一个虚方法,所以标准Java多态接管。
现在, Comparator#equals
施加了额外的限制 ,这就是它被指定为接口的一部分的原因。
..这个方法只有在指定的对象也是比较器的情况下才能返回true,并且它与该比较器的顺序相同。
但是,由于反过来需要为真,所以不重载equals
不会破坏新的要求。
请注意,不要覆盖Object.equals(Object)始终是安全的.. [因为那时不同的比较器实例永远不会相等]。
- WebSphere和Maven的deployment.xml
- JPA Hibernate Persistenceexception无法构建Hibernate SessionFactory
- 我可以使用FileChannel独立地从不同的线程中查找文件吗?
- Java:递归查找列表中的最小元素
- Java编程新手 – Javac问题
- 从GWT应用程序中执行RPC时出现SerializationPolicy错误
- 从java中的服务器下载文件
- 为什么Java Pattern类使用工厂方法而不是构造函数?
- Hibernate 3.5.x:NoSuchMethodError:javax.persistence.OneToMany.orphanRemoval