public boolean equals(Object otherObject)
{
// a quick test to see if the objects are identical
if (this == otherObject) return true;
// must return false if the explicit parameter is null
if (otherObject == null) return false;
// if the classes don't match, they can't be equal**
//如果equals語義在子類中有所改變,就是子類的equals和父類的equals在概念上是不同的,那就用getClass來比較類
if (getClass() != otherObject.getClass()) return false;
//如果equals語義在子類中並沒有發生改變,和父類是一樣的,那麼就用instanceof來比較類是否相同
if(!(otherObject instanceof ClassName)) return false;**
// now we know otherObject is a non-null Employee
Employee other = (Employee) otherObject;
// test whether the fields have identical values
return name.equals(other.name) && salary == other.salary && hireDay.equals(other.hireDay);
}
為什麼子類中的語義不同就用getClass而相同就用instanceof?我知道二者的區別,而且我覺得這個instanceof應該有點問題吧,就是比如a是父類,b是子類,且這時候子類的equals語義沒有發生變化,那麼a.equals(b)和b.equals(a)的結果就不一樣了吧,因為子類instanceof父類是true,而父類instanceof子類就是false——這就不滿足equals定義中的對稱性。
大神求解
子類和父類的比較到不了instanceof那裡。