freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[高等教育]第4章類的重用(編輯修改稿)

2025-02-15 18:51 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 e Manager Customer Page 51 Object 類 ? Object類 – 在 – Java程序中所有類的直接或間接父類,類庫(kù)中所有類的父類,處在類層次最高點(diǎn)。 – 包含了所有 Java類的公共屬性,其構(gòu)造方法是Object( )。 Page 52 ? Object類定義了所有對(duì)象必須具有的狀態(tài)和行為,較主要的方法如下: – public final Class getClass( ) ?獲取當(dāng)前對(duì)象所屬的類信息,返回 Class對(duì)象 – public String toString( ) ?返回當(dāng)前對(duì)象本身的有關(guān)信息 – public boolean equals(Object obj) ?比較兩個(gè)對(duì)象是否是同一對(duì)象,是則返回 true – protected Object clone( ) ?生成當(dāng)前對(duì)象的一個(gè)拷貝,并返回這個(gè)復(fù)制對(duì)象 – public int hashCode( ) ?返回該對(duì)象的哈希代碼值 – protected void finalize( ) throws Throwable ?定義回收當(dāng)前對(duì)象時(shí)所需完成的資源釋放工作 Page 53 1. 相等和同一 –如果兩個(gè)對(duì)象具有相同的類型及相同的屬性值,則稱二者 相等 (equal)。 –如果兩個(gè)引用變量指向的是同一個(gè)對(duì)象,則稱這兩個(gè)變量 (對(duì)象 )同一 (identical)。 –兩個(gè)對(duì)象同一,則肯定相等。 –兩個(gè)對(duì)象相等,不一定同一。 –等號(hào)“ ==” 判斷的是這兩個(gè)對(duì)象是否同一。 Page 54 例 48 判斷兩個(gè)對(duì)象是否同一。 public class Ex4_7{ public static void main(String args[]){ BankAccount a = new BankAccount(Bob, 123456, )。 BankAccount b = new BankAccount(Bob, 123456, )。 if (a == b) (YES)。 else (NO)。 } } 運(yùn)行結(jié)果: NO Page 55 ? 修改例 47的程序 public class Ex4_7{ public static void main(String args[]){ BankAccount a = new BankAccount(Bob, 123456, )。 BankAccount b = a。 if (a == b) (YES)。 else (NO)。 } } 運(yùn)行結(jié)果: YES Page 56 2. Object類中的 equals( ) 方法 – 由于 Object是類層次結(jié)構(gòu)中的樹(shù)根節(jié)點(diǎn),因此所有其他類都繼承了 equals( )方法。 – Object類中的 equals( ) 方法 的定義如下,可見(jiàn),也是 判斷兩個(gè)對(duì)象是否同一。 public boolean equals(Object x) { return this == x。 } Page 57 例 49 Object類中 equals方法的使用舉例。 public class EqualsTest{ public static void main(String args[]){ BankAccount a = new BankAccount(Bob, 123456, )。 BankAccount b = new BankAccount(Bob, 123456, )。 if ((b)) (YES)。 else (NO)。 } } //等價(jià)于 a==b 由于不是同一對(duì)象,運(yùn)行結(jié)果仍然是“ NO‖ Page 58 3. equlas方法的重寫(xiě) – 要判斷兩個(gè)對(duì)象各個(gè)屬性域的值是否相同,則不能使用從 Object類繼承來(lái)的 equals方法,而需要在類聲明中對(duì) equals方法進(jìn)行重寫(xiě)。 – String類中已經(jīng)重寫(xiě)了 Object類的 equals方法,可以判別兩個(gè)字符串是否內(nèi)容相同。 Page 59 ? 在 BankAccount類中增加 equals方法,由于是對(duì)Object類中的 equals方法進(jìn)行重寫(xiě),因此方法定義頭必須與 Object類中的 equals方法完全相同。 public boolean equals(Object x) { if (( ) != ( )) //類型不同 return false。 BankAccount b = (BankAccount) x。 return ((( ).equals(( ))) amp。amp。(( ) == ( )) amp。amp。(( ) == ( )))。 } Page 60 例 410 equals方法的應(yīng)用舉例。 public class Apple { private String color。 private boolean ripe。 public Apple(String aColor, boolean isRipe) { color = aColor。 ripe = isRipe。 } public void setColor(String aColor) { color = aColor。 } public void setRipe(boolean isRipe) { ripe = isRipe。 } Page 61 public String getColor( ) { return color。 } public boolean getRipe( ) { return ripe。 } public String toString( ) { if (ripe) return(A ripe + color + apple)。 else return(A not so ripe + color + apple)。 } public boolean equals(Object obj) { if (obj instanceof Apple) { Apple a = (Apple) obj。 return ((()) amp。amp。 (ripe == ( )))。 } return false。 } } Page 62 public class AppleTester { public static void main(String args[]) { Apple a = new Apple(red, true)。 Apple b = new Apple(red, true)。 (a + is equal to + b + : + (b))。 (a is identical to b: + (a == b))。 Apple c = a。 (a + is equal to + c + : + (c))。 (a is identical to c: + (a == c))。 } } Page 63 ? 運(yùn)行結(jié)果 – A ripe red apple is equal to A ripe red apple: true – a is identical to b: false – A ripe red apple is equal to A ripe red apple: true – a is identical to c: true Page 64 ? Clone方法 – 根據(jù)已存在的對(duì)象構(gòu)造一個(gè)新的對(duì)象。 – 在根類 Object 中被定義為 protected,所以需要覆蓋為 protected。 在例 410的 Apple類中增加 Clone方法,代碼如下: protected Object clone( ) { Apple anapple=new Apple(,)。 return anapple。 } 另外:在 main方法中增加如下代碼: Apple d=(Apple)( )。 (a is identical to d: +(a==d))。 (a is equal to d: +((d)))。 輸出: false true Page 65 若把 clone( )方法改為 protected Object clone( ) { Apple anapple=this。 return anapple。 } Apple d=(Apple)( )。 (a is identical to d: +(a==d))。 (a is equal to d: +((d)))。 輸出: true true Page 66 ? finalize方法 – 在對(duì)象被垃圾回收器回收之前,系統(tǒng)自動(dòng)調(diào)用對(duì)象的 finalize方法。該方法類似于 C++語(yǔ)言的析構(gòu)函數(shù)。 – finalize的方法頭 protected void finalize( ) 。 – 如果要覆蓋 finalize方法,覆蓋方法的最后必須調(diào)用 ( )。 try { ( )。 }catch(Throwable e){ (e)。 } Page 67 ? getClass方法 – 方法頭: public final Class getClass( ) ,返回一個(gè) Class對(duì)象,用來(lái)代表對(duì)象隸屬的類。 – 通過(guò) Class 對(duì)象,可以查詢 Class對(duì)象的各種信息:比如它的名字、它的基類、它所實(shí)現(xiàn)接口的名字等。 void PrintClassName(Object obj) { (The Object39。s class is + ( ).getName( ) + \nIts SupperClass is + ( ). getSuperclass( ))。 } Page 68 ? notify、 notifyAll、 wait方法 – final方法,不能覆蓋 – public final void notify( ) – public final void notifyAll( ) – public final void wait(long timeout) throws InterruptedException – public final void wait(long timeout, int nanos) throws InterruptedException – public final void wait( ) throws InterruptedException – 這三個(gè)方法主要用在多線程程序中 Page 69 終結(jié)類與終結(jié)方法 ?終結(jié)類與終結(jié)方法 – 被 final修飾符修飾的類和方法。 –終結(jié)類不能被繼承。 – 終結(jié)方法不能被當(dāng)前類的子類重寫(xiě)。 Page 70 終結(jié)類 ?終結(jié)類的特點(diǎn) –不能有派生類。 ?終結(jié)類存在的理由 –安全 : 黑客用來(lái)攪亂系統(tǒng)的一個(gè)手法是建立一個(gè)類的派生類,然后用他們的類代替原來(lái)的類。 –設(shè)計(jì) : 你認(rèn)為你的類是最好的或從概念上你的類不應(yīng)該有任何派生類。 Page 71 ? 聲明 ChessAlgorithm 類為 final 類 final class ChessAlgorithm { . . . } ? 如果編寫(xiě)如下程序: class BetterChessAlgorithm extends ChessAlgorithm { … } 編譯器將顯示一個(gè)錯(cuò)誤 :6: Cannot inherit froms final ChessAlgorithm Page 72 ?終結(jié)方法的特點(diǎn) – 不能被派生類覆蓋(重寫(xiě))。 ?終結(jié)方法存在的理由 – 對(duì)于一些比較重要且不希望子類進(jìn)行更改的方法,可以聲明為終結(jié)方法??煞乐棺宇悓?duì)父類關(guān)鍵方法的錯(cuò)誤重寫(xiě),增加了代碼的
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1