程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 對象-java的equals方法重寫中的小問題

對象-java的equals方法重寫中的小問題

編輯:編程綜合問答
java的equals方法重寫中的小問題
        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那裡。

tongyi55555
qq_23908539
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved