在子类中调用super.equals和super.hashCode?

BJ *_*ruz 8 java equals hashcode

如果我实现equals()hashCode()两个父类和子类,是有必要呼吁super.equals()equals()在子类中,如

public boolean equals(Object obj) {

  if (obj.getClass() != ChildClass.class) {
    return false;
  }

  return super.equals() && this.var == ((ChildClass) obj).var;

}
Run Code Online (Sandbox Code Playgroud)

我假设父类不是Object,并且给出了equals和hashCode的正确定义.

Nor*_*ray 8

不,这不是必要的,也可能是错的.实际上,你压倒一切的部分原因equal是因为super.equals没有给出正确的行为(对吧?).

换句话说,如果super.equals给出正确的行为,你可能不需要去覆盖它的麻烦.

但如果你压倒一切equals,那么是的,你也需要覆盖hashCode.

  • 好吧,如果正在实现值相等,可能需要调用`super.equals()`来检查相等的继承字段... (6认同)
  • `SuperClass.equals`显然只能比较`SuperClass`实例,并且对`SubClass`一无所知.这就是为什么`SubClass`必须覆盖它,即使它在'SuperClass`方面完全正确.但是在`SubClass`(或在每个子类中)重新实现它的行为而不是调用`super.equals`(在比较子类部分之前)是愚蠢的,对吧? (4认同)