?? 09_object_day05.txt
字號(hào):
Object
clone
Object類的clone()方法.覆蓋之后調(diào)用父類的clone()方法,完成對(duì)protect屬性或方法的調(diào)用.
對(duì)象的克隆里面還要注意:
讓一個(gè)對(duì)象可以拷貝,有兩個(gè)工作:
1.覆蓋Object方法.
2.實(shí)現(xiàn)Cloneable接口,表示這個(gè)類可以被克隆.
接口中如果沒有方法,那么它被稱為標(biāo)記接口,它僅僅是為了標(biāo)記的作用沒有實(shí)際的含義.功能接口是為了擴(kuò)展一個(gè)類的功能,有具體的方法.
除了實(shí)現(xiàn)克隆之外克隆還有兩種形式:淺拷貝和深拷貝.
淺拷貝:
拷貝對(duì)象的時(shí)候,基本類型的屬性完成拷貝,對(duì)象類型的拷貝只拷貝了引用值.
深拷貝:
拷貝對(duì)象時(shí)候,把對(duì)象類型的屬性重新創(chuàng)建一份拷貝過(guò)來(lái).
例子
CloneTest
Animal
Person owner
Person
標(biāo)記接口
Cloneable接口,意義是讓instanceof標(biāo)識(shí)符可用.
equals
判斷當(dāng)前對(duì)象和參數(shù)中的對(duì)象是否相等,
再Object中定義的equals方法返回的就是用==判斷的結(jié)果.
這里的意思是,所有類的對(duì)象都能夠去比較的,但是具體對(duì)象的判斷是否相當(dāng)是不能確定的,所以這個(gè)是否相等的判斷規(guī)則需要由類的定義者類實(shí)現(xiàn)的.
所以我們需要去覆蓋這個(gè)Object對(duì)象equals方法給我定義的類來(lái)判斷兩個(gè)對(duì)象是否相等.
注意形參傳入的Object對(duì)象:在方法內(nèi)部要做強(qiáng)制類型轉(zhuǎn)換.參數(shù)Object類型不可以改變,改變了就為背了方法覆蓋的原則.
比較相等的前提就是比較他們是否是同一個(gè)類型的對(duì)象.instanceof
equals方法的覆蓋java提出了一些約定:約定俗成
在Object文檔中由規(guī)范的具體描述.
equals 方法在非空對(duì)象引用上實(shí)現(xiàn)相等關(guān)系:
自反性:對(duì)于任何非空引用值 x,x.equals(x) 都應(yīng)返回 true。
對(duì)稱性:對(duì)于任何非空引用值 x 和 y,當(dāng)且僅當(dāng) y.equals(x) 返回 true 時(shí),x.equals(y) 才應(yīng)返回 true。
傳遞性:對(duì)于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 應(yīng)返回 true。
一致性:對(duì)于任何非空引用值 x 和 y,多次調(diào)用 x.equals(y) 始終返回 true 或始終返回 false,前提是對(duì)象上 equals 比較中所用的信息沒有被修改。
對(duì)于任何非空引用值 x,x.equals(null) 都應(yīng)返回 false
finalize
當(dāng)垃圾回收器確定不存在對(duì)該對(duì)象的更多引用時(shí),由對(duì)象的垃圾回收器調(diào)用此方法。子類重寫 finalize 方法,以配置系統(tǒng)資源或執(zhí)行其他清除。
一個(gè)對(duì)象在被垃圾回收器之前被調(diào)用一次,一般情況下把一些釋放資源的代碼寫在這里.
toString
返回對(duì)這個(gè)對(duì)象的一個(gè)字符串的描述.
在程序中直接的輸出一個(gè)對(duì)象,在任何情況下,我們希望得到對(duì)象的字符串的描述,那么就會(huì)去調(diào)用對(duì)象的這個(gè)方法.
還剩7個(gè)在后面的課程里面是都會(huì)一一講到的.
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -