Object类里有了的方法,为什么在接口里还要定义抽象方法
今天看java.util.Comparator 这个接口,看到里面除了有个 int compare(T o1,T o2); 这个抽象方法外,还有 boolean equals(Object obj);这个抽象方法。
我看到的代码,都没有实现这个抽象方法,(包括自己写代码,也没有实现),程序也不报错,是否说明这个方法在实现这个接口的类的父类(Object)已经实现了?
假设是这样的话,那这个方法就不需要定义了,(因为接口都要由类实现,而所有的类都是Object的子类,那自然都继承了这个方法,当然可以重写。
如果不是这样的话,那它的意义究竟是什么呢?
可能说的不清楚,简单的说,既然Object类里有了的方法,为什么在接口里还要定义抽象方法?
方便要求实现类中实现方法的复写,定义自己指定的toString(),equals(),hashcode()方法。
* Note that it is <i>always</i> safe <i>not</i> to override
* <tt>Object.equals(Object)</tt>. However, overriding this method may,
* in some cases, improve performance by allowing programs to determine
* that two distinct comparators impose the same order.
这是为了在你的代码中对这两个方法进行重写(当你需要这样做时)。
比如我们在Hibernate中采用复合主键类时
1.Object类并没有实现Comparator接口。
2.如果你在你的代码中使用compare方法,还是需要自己写的。