Let's say I have two classes
class A {
private String aStr;
@Override
public int hashCode() {
return Objects.hash(aStr);
}
}
and
class B extends A {
private String bStr;
@Override
public int hashCode() {
return Objects.hash(bStr);
}
}
As the fields of class A are still fields in B that need to be hashed, how do I properly include the hash code of the fields in A in B.hashCode()? Any of these?
Objects.hash(bStr) + super.hashCode();
// these generate a StackOverflowError:
Objects.hash(bStr, (A) this);
Objects.hash(bStr, A.class.cast(this));

I'd probably use
Objects.hash(bStr, super.hashCode())
You definitely want to combine the state you know about with the superclass implementation of hashCode(), so any solution would want to use bStr and super.hashCode()... your original idea of addition would work too, of course - it's just a different way of combining the results.
See more on this question at Stackoverflow