java 类库里的接口(如Comparator,定义了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. [解决办法] 我猜这个定义这个方法的意义就在于让实现接口的程序员注意到上面这段注释。 [解决办法] 是不是实现Comparator 接口的类中本来就有equels方法,所以一般不用再去实现它了! [解决办法] 这是为了在你的代码中对这两个方法进行重写(当你需要这样做时)。 比如我们在Hibernate中采用复合主键类时: 我们的Person类:
Person.java @Entity @Table(name="peroson_table") public class Person { /*指定使用复合主键类是Name*/ @EmbeddedId @AttributeOverrides({ @AttributeOverride(name="first",column=@Column(name="person_first")), @AttributeOverride(name="last",columen=@Column(name="person_last",length=20)) }) private Name name; //普通属性 @Column(name="person_email") private String email; ...Name属性的set和get方法 ...Email属性的set和get方法