如何为subClass编写hashCode()

时间:2016-02-22 21:22:49

标签: java hashcode

我对hashCode有疑问。例如:

class A{
   String name;
   int age;

   @Override
   public int hashCode(){
       int hash = 0;
       hash = age;
       hash = 31*hash + name.hashCode();
   }
}
class B extends A{
}
class C extends A{
}    

我的问题是,如果我实例化一个B对象和一个具有相同名称和年龄的C对象。然后A和B的hashCode()也是一样的。 hashCode()是否正确?如果没有,我该怎么做才能修改我的代码?

1 个答案:

答案 0 :(得分:2)

当然,hashCode()可以做到这一点。

当然,如果BC添加了任何新字段(这些字段很常见),那么他们应该覆盖hashCode(),调用super.hashCode()并“扩展”价值也是如此。

此外,正如@bradimus在评论中暗示提问时,当您覆盖hashCode()时,您很可能也会覆盖equals()