儘管object是乙個具體類,但設計它主要是為了擴充套件。它所有的非final方法都有明確的通用約定,因為它們設計成是要被覆蓋的。
本章將講述何時以及如何覆蓋這些非final的object方法。
類的每個例項本質上都是唯一的。
類沒有必要提供「邏輯相等」的測試功能
超類已經覆蓋了equals,超類的行為對於這個類也是合適的。
類是私有的,或者是保級私有的,可以確定它的equals方法永遠不會被呼叫
在 覆蓋equals方法的時候,必須要遵守它的通用約定。下面是約定的內容,來自object的規範。
(1) 自反性:對於任何非null的引用值x,x.equals(x) 必須返回true
(2) 對稱性:對於任何非null的引用值x和y,當且僅當y.equals(x)返回true時,x.equals(y)必須返回true.
(3) 傳遞性:對於任何非null的引用值x、y和z,如果x.equals(y)返回true,並且y.equals(z)也返回true,那麼x.equals(z)也必須返回true。
(4) 一致性:對於任何非null的引用值x和y,只要equals的比較操作在物件中所用的資訊沒有被修改,多次呼叫都會返回true或false。
(5) 對於任何非null的引用值x, x.equals(null)必須返回false。
在每個覆蓋了equals方法的類中,都必須覆蓋hashcode方法、
因沒有覆蓋hashcode而違反的關鍵約定是第二條:相等的物件必須具有相等的雜湊碼(hash code)。
第二遍待續。。
提供好的tostring實現可以使類用起來更加舒適,使用了這個類的系統也更易於除錯
在實際應用中,tostring方法應該返回物件中包含的所有值得關注的資訊。
無論是否決定制定格式,都應該在文件中明確地表面你的意圖。
在compareto方法中使用關係操作符 < 和 > 是非常繁瑣的,並且容易出錯,因此不再建議使用。
比較構造器:
public
intcompareto
(phonenumber pn)
}return result;
}
第6章 通用物件操作
6.1 物件的等值性與唯一性 system.object型別中的equals方法是比較兩個引用,如果指向的是同乙個物件則返回true,否則在任何其他情況下都返回false 當重寫自己的equals方法時,必須確保它遵循以下4條規則 1 equals方法必須是自反的,也就是說x.equals x 必須...
第3章 類和物件
1 c 規定,預設情況下,結構中成員是public,類中成員是private 2 成員函式的定義 必須使函式體與inline說明結合在一起,否則編譯器將它作為普通函式處理。class point inline void point setpoint int a,int b 若宣告成 inline v...
JavaScript物件程式設計 第3章
物件擁有屬性和方法,屬性各種資料型別,方法對屬性中的資料進行操作。var 日期物件 new date var 日期物件 new date 毫秒數 var 日期物件 new date 字串 var 日期物件 new date 年 月 日等引數 to方法 tolocalestring togmtstri...