Java程序設(shè)計(jì)@第04章_繼承_第1頁(yè)
Java程序設(shè)計(jì)@第04章_繼承_第2頁(yè)
Java程序設(shè)計(jì)@第04章_繼承_第3頁(yè)
Java程序設(shè)計(jì)@第04章_繼承_第4頁(yè)
Java程序設(shè)計(jì)@第04章_繼承_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、4JavaJava程序設(shè)計(jì)程序設(shè)計(jì)第第0404章章 繼承繼承本章內(nèi)容本章內(nèi)容CORE-C04-01 類、父類與抽象CORE-C04-02 類、子類與繼承 CORE-C04-03 根父類:Object類 CORE-C04-04 繼承設(shè)計(jì)與應(yīng)用本章目標(biāo)本章目標(biāo)1、實(shí)現(xiàn)類的繼承。2、能熟練使用Object中方法第01節(jié) 類、父類與抽象知識(shí)點(diǎn)預(yù)覽知識(shí)點(diǎn)預(yù)覽# #節(jié)節(jié)知識(shí)點(diǎn)知識(shí)點(diǎn)難點(diǎn)難點(diǎn)重點(diǎn)重點(diǎn)應(yīng)用應(yīng)用1CORE-C04-01 類、父類與抽象1、類的共性抽象2、類的層次結(jié)構(gòu)1、類的共性抽象、類的共性抽象面向?qū)ο蟮囊霑?huì)提供軟件項(xiàng)目實(shí)現(xiàn)的穩(wěn)定性,穩(wěn)定性的一個(gè)重要方面向?qū)ο蟮囊霑?huì)提供軟件項(xiàng)目實(shí)現(xiàn)的穩(wěn)定性,

2、穩(wěn)定性的一個(gè)重要方面是軟件項(xiàng)目模塊可復(fù)用與擴(kuò)展。面是軟件項(xiàng)目模塊可復(fù)用與擴(kuò)展。u Java提供繼承的語(yǔ)法機(jī)制類實(shí)現(xiàn)模塊的復(fù)用與擴(kuò)展、升級(jí)。public class Person private String name; private byte age; public void printInfo(). public class Student private String name; private byte age; private String school; public void printInfo(). public void study(). 2、類的層次結(jié)構(gòu)、類的層次結(jié)構(gòu)Per

3、son-name:String-age:byte+printInfo():voidStudent-school:String+study():voidTeacher-dept:String+teach():void第02節(jié) 類、子類與繼承 知識(shí)點(diǎn)預(yù)覽知識(shí)點(diǎn)預(yù)覽# #節(jié)節(jié)知識(shí)點(diǎn)知識(shí)點(diǎn)難點(diǎn)難點(diǎn)重點(diǎn)重點(diǎn)應(yīng)用應(yīng)用2CORE-C04-02 類、子類與繼承1、類的擴(kuò)展2、類的繼承語(yǔ)法3、子類對(duì)象實(shí)例化與構(gòu)造器4、super5、覆蓋與多態(tài)6、覆蓋與修飾符號(hào)7、覆蓋與異常轉(zhuǎn)移8、阻止繼承與final修飾符號(hào)9、類型轉(zhuǎn)換10、類型裝箱與解箱11、protected修飾符號(hào)1、類的擴(kuò)展、類的擴(kuò)展子類與父類的關(guān)系:

4、子類與父類的關(guān)系:u 子類比起父類就是成員更加豐富: 成員變量增加(擴(kuò)展)。 處理成員變量的成員方法增加(擴(kuò)展)。 class 父類父類 /成員變量成員變量/成員方法成員方法 class 子類子類/這樣也可以描述子類這樣也可以描述子類 /父類成員變量父類成員變量/父類成員方法父類成員方法/擴(kuò)展的成員變量擴(kuò)展的成員變量/擴(kuò)展的成員方法擴(kuò)展的成員方法 子類的描述方法明顯兩個(gè)缺點(diǎn):子類的描述方法明顯兩個(gè)缺點(diǎn): 1、描述重復(fù)。、描述重復(fù)。 2、從代碼無(wú)法反映父子關(guān)系、從代碼無(wú)法反映父子關(guān)系。2、類的繼承語(yǔ)法、類的繼承語(yǔ)法-1類擴(kuò)展(繼承)的語(yǔ)法機(jī)制類擴(kuò)展(繼承)的語(yǔ)法機(jī)制 class 子類子類 ext

5、ends 父類父類 /擴(kuò)展的成員變量擴(kuò)展的成員變量/構(gòu)造方法構(gòu)造方法/擴(kuò)展的成員方法擴(kuò)展的成員方法 class 父類父類 /成員變量成員變量/成員方法成員方法 class 子類子類 extends 父類父類/擴(kuò)展的成員變量擴(kuò)展的成員變量/擴(kuò)展的成員方法擴(kuò)展的成員方法 子類的描述方法明顯解決了缺點(diǎn):子類的描述方法明顯解決了缺點(diǎn): 1、描述不重復(fù)。、描述不重復(fù)。 2、體現(xiàn)父子關(guān)系、體現(xiàn)父子關(guān)系。2、類的繼承語(yǔ)法、類的繼承語(yǔ)法-2子類對(duì)象也可以訪問(wèn)父類中的成員。子類對(duì)象也可以訪問(wèn)父類中的成員。class ClsSuperpublic int m_a=20;public void show()Syst

6、em.out.printf(m_a=%dn,m_a);class ClsSub extends ClsSuperpublic int m_b=30;public void print(int a) /使用父類成員變量像自己的成員變量一樣,不需要通過(guò)方法(對(duì)成員方法亦然)使用父類成員變量像自己的成員變量一樣,不需要通過(guò)方法(對(duì)成員方法亦然)System.out.printf(“m_a=%d,m_b=%d,參數(shù)參數(shù)=%dn”,m_a,m_b,a);ClsSub objsub=new ClsSub();System.out.println(objsub.m_a);/訪問(wèn)父類的成員變量訪問(wèn)父類的成員變

7、量System.out.println(objsub.m_b);objsub.show();/訪問(wèn)父類的成員方法訪問(wèn)父類的成員方法objsub.print(999);2、類的繼承語(yǔ)法、類的繼承語(yǔ)法-3子類對(duì)象的類型:子類對(duì)象的類型:u 依據(jù)常規(guī)白馬是馬的邏輯思路,子類對(duì)象肯定是父類型。在Java的語(yǔ)法規(guī)則上: 可以把子類類型的對(duì)象賦值給父類類型的對(duì)象。u 依據(jù)馬不一定是白馬的邏輯思路,父類對(duì)象不一定是子類類型。在Java的語(yǔ)法規(guī)則上: 不能把父類對(duì)象賦值給子類對(duì)象。class ClsSub extends ClsSuper/ClsSuper是是ClsSub的子類的子類 ClsSub sub=n

8、ull; ClsSuper sup=new ClsSuper(); sub=sup;/語(yǔ)法錯(cuò)誤語(yǔ)法錯(cuò)誤 sub=new ClsSuper();/語(yǔ)法錯(cuò)誤語(yǔ)法錯(cuò)誤 sup=sub;/語(yǔ)法正確語(yǔ)法正確 2、類的繼承語(yǔ)法、類的繼承語(yǔ)法-4子類對(duì)父類的擴(kuò)展有幾個(gè)重點(diǎn)必須清楚:子類對(duì)父類的擴(kuò)展有幾個(gè)重點(diǎn)必須清楚:u 盡管子類擴(kuò)展父類,但子類與父類屬于不同的類塊,作用域不同,遵循不同作用域規(guī)則。 子類的成員變量可以與父類的成員變量重名。 子類的成員方法可以與父類的成員方法重名,甚至參數(shù)類型、順序、個(gè)數(shù)都完全相同。 class ClsSuper public int m_a=20;public void s

9、how(int a) class ClsSub extends ClsSuperpublic int m_a=30;public void show(int a) 成員變量在父子類中重名成員變量在父子類中重名的解決規(guī)則與成員方法是不同的的解決規(guī)則與成員方法是不同的2、類的繼承語(yǔ)法、類的繼承語(yǔ)法-4子類的成員變量與父類的成員變量重名的訪問(wèn)規(guī)則:子類的成員變量與父類的成員變量重名的訪問(wèn)規(guī)則:u 當(dāng)使用對(duì)象訪問(wèn),根據(jù)對(duì)象的申明類型來(lái)確認(rèn):對(duì)象申明為父類型,就訪問(wèn)父類中成員變量,聲明為子類類型就訪問(wèn)子類中成員變量。子類中沒(méi)有,就到父類中查找成員變量并訪問(wèn)。 class ClsSuper public

10、int m_a=20; class ClsSub extends ClsSuperpublic int m_a=30; ClsSuper o1=new ClsSuper(); System.out.println(o1.m_a);/ClsSuper中成員。中成員。 ClsSuper o2=new ClsSub(); System.out.println(o2.m_a);/ClsSuper中成員。中成員。 ClsSub o3=new ClsSub(); System.out.println(o3.m_a);/ClsSub 中成員。中成員。 3、子類對(duì)象實(shí)例化與構(gòu)造器、子類對(duì)象實(shí)例化與構(gòu)造器-1子

11、類與父類是屬于兩個(gè)不同的塊,也就是屬于兩個(gè)不同的作用域,作子類與父類是屬于兩個(gè)不同的塊,也就是屬于兩個(gè)不同的作用域,作用域不同也意味著內(nèi)存存儲(chǔ)區(qū)域的差異。用域不同也意味著內(nèi)存存儲(chǔ)區(qū)域的差異。u 子類對(duì)象的空間分配也是分成兩個(gè)部分:父類內(nèi)存空間,子類內(nèi)存空間。 20 30m_am_aClsSuperClsSubClsSuper o2=new ClsSub(); System.out.println(o2.m_a);/ClsSuper中成員。中成員。 o2對(duì)象實(shí)際是訪問(wèn)位置對(duì)象實(shí)際是訪問(wèn)位置 對(duì)象決定訪問(wèn)的開(kāi)始位置,對(duì)象決定訪問(wèn)的開(kāi)始位置, 類型決定訪問(wèn)的范圍。類型決定訪問(wèn)的范圍。3、子類對(duì)象實(shí)例

12、化與構(gòu)造器、子類對(duì)象實(shí)例化與構(gòu)造器-2當(dāng)子類擴(kuò)展父類,子類對(duì)象可以訪問(wèn)父類的成員,但其中有一個(gè)必須當(dāng)子類擴(kuò)展父類,子類對(duì)象可以訪問(wèn)父類的成員,但其中有一個(gè)必須要注意:要注意:u 父類的構(gòu)造器不能初始化子類成員,子類構(gòu)造器不能初始化父類成員。u 子類與父類的成員都是由自己的構(gòu)造器完成初始化。u 子類對(duì)象化的時(shí)候,首先判定是否有父類,沒(méi)有父類就直接調(diào)用構(gòu)造器完成成員變量初始化。u 有則調(diào)用父類構(gòu)造器完成父類成員變量的初始化,然后調(diào)用子類構(gòu)造器初始化子類成員變量。u 不管父子類,他們的成員都使用自己的構(gòu)造器來(lái)初始化自己的成員變量。子類的構(gòu)造器不能初始化父類的成員,父類構(gòu)造器不能初始化子類的成員。當(dāng)子

13、類初始化的時(shí)候,會(huì)調(diào)用父類構(gòu)造器,但由于構(gòu)造器重載,當(dāng)子類初始化的時(shí)候,會(huì)調(diào)用父類構(gòu)造器,但由于構(gòu)造器重載,JavaJava引入如下語(yǔ)法規(guī)則:引入如下語(yǔ)法規(guī)則:u 當(dāng)子類初始化的時(shí)候,默認(rèn)調(diào)用父類的缺省構(gòu)造器。u 但也可以指定構(gòu)造器類初始化父類成員變量。3、子類對(duì)象實(shí)例化與構(gòu)造器、子類對(duì)象實(shí)例化與構(gòu)造器-3使用使用supersuper指定父類構(gòu)造器指定父類構(gòu)造器 class ClsSuper private int m_a=20;public ClsSuper()public ClsSuper(int a)m_a=a; class ClsSub extends ClsSuperprivate

14、int m_b=30;public ClsSub(int b,int a)super(a);/調(diào)用調(diào)用ClsSuper(int a)m_b=b;public ClsSub(int b)/調(diào)用調(diào)用ClsSuper()構(gòu)造器,構(gòu)造器,m_a=20m_b=b;Super必須在構(gòu)造器的第一行。必須在構(gòu)造器的第一行。調(diào)用缺省構(gòu)造器3、子類對(duì)象實(shí)例化與構(gòu)造器、子類對(duì)象實(shí)例化與構(gòu)造器-4當(dāng)把子類對(duì)象賦值給父類對(duì)象,最后導(dǎo)致真正的類型無(wú)法確認(rèn)。當(dāng)把子類對(duì)象賦值給父類對(duì)象,最后導(dǎo)致真正的類型無(wú)法確認(rèn)。JavaJava提供專門的語(yǔ)法來(lái)識(shí)別對(duì)象的真正類型。提供專門的語(yǔ)法來(lái)識(shí)別對(duì)象的真正類型。u 對(duì)象 instanc

15、eof 類型 ClsSuper o2=new ClsSub(); if(o2 instanceof ClsSub) System.out.println(“o2 是是ClsSub類型類型”); 4、super關(guān)鍵字關(guān)鍵字supersuper除了當(dāng)成構(gòu)造器使用外,還可以作為作用域使用:除了當(dāng)成構(gòu)造器使用外,還可以作為作用域使用:u 當(dāng)父類成員與子類成員沖突的時(shí)候,使用super.成員可以區(qū)分是父類中成員,不加super前綴或者加this前綴表示是當(dāng)前類成員。u 當(dāng)父類、子類成員不沖突的時(shí)候,不需要super前綴。注意:注意:u super作為構(gòu)造器使用,必須放在構(gòu)造器中,而且必須是第一行。u s

16、uper作為作用域使用,可以在構(gòu)造器,也可以在成員方法內(nèi)使用,可以放在任意行。5、覆蓋與多態(tài)、覆蓋與多態(tài)-1父類與子類的成員方法重名,沖突分成兩種情況:父類與子類的成員方法重名,沖突分成兩種情況:u 在類內(nèi)部不通過(guò)對(duì)象使用。 可以使用this,super關(guān)鍵字區(qū)分。u 通過(guò)對(duì)象使用。 Java語(yǔ)法的默認(rèn)規(guī)則是:不管對(duì)象是什么類型,調(diào)用的方法都是new后構(gòu)造器所在類的方法。(與對(duì)象的表現(xiàn)類型無(wú)關(guān)),稱為覆蓋(Override) class ClsSuper public void show() class ClsSub extends ClsSuperpublic void show() Cls

17、Super objsuper=new ClsSub(); objsuper.show();先確認(rèn)對(duì)象的實(shí)際類型。先確認(rèn)對(duì)象的實(shí)際類型。再確認(rèn)類所在的方法,并調(diào)用。再確認(rèn)類所在的方法,并調(diào)用。5、覆蓋與多態(tài)、覆蓋與多態(tài)-2JavaJava提供的提供的OverrideOverride語(yǔ)法對(duì)程序的穩(wěn)定結(jié)構(gòu)有非常重要的作用。語(yǔ)法對(duì)程序的穩(wěn)定結(jié)構(gòu)有非常重要的作用。 class ClsSuper public void show() class ClsSub1 extends ClsSuperpublic void show()/實(shí)現(xiàn)實(shí)現(xiàn)1 class ClsSub2 extends ClsSuperpu

18、blic void show()/實(shí)現(xiàn)實(shí)現(xiàn)2 class Main public static void main(String args)ClsSuper obj=new ClsSub1();/表現(xiàn)類型表現(xiàn)類型ClsSuper實(shí)際類型實(shí)際類型ClsSub1call(obj);/call內(nèi)部的調(diào)用因?qū)ο蟛煌煌?。?nèi)部的調(diào)用因?qū)ο蟛煌煌?稱為多態(tài)(一個(gè)方法多種實(shí)現(xiàn))稱為多態(tài)(一個(gè)方法多種實(shí)現(xiàn))public static void call(ClsSuper obj)obj.show();6、覆蓋與修飾符號(hào)、覆蓋與修飾符號(hào)-1為了防止方法被覆蓋,可以使用修飾符為了防止方法被覆蓋,可以使用修

19、飾符finalfinal。u 使用final修飾的方法是不能被覆蓋的。為了防止覆蓋方法因拼寫原因,而沒(méi)有覆蓋,可以使用標(biāo)注修飾讓編為了防止覆蓋方法因拼寫原因,而沒(méi)有覆蓋,可以使用標(biāo)注修飾讓編譯器做語(yǔ)法檢測(cè)。譯器做語(yǔ)法檢測(cè)。u Override。/注意區(qū)分大小寫。 class ClsSuper public void show() class ClsSub extends ClsSuperOverride/如果如果show方法與父類不一樣,會(huì)報(bào)編譯錯(cuò)誤。方法與父類不一樣,會(huì)報(bào)編譯錯(cuò)誤。public void show() public Override void show() /Override

20、作為修飾符,與其他修飾符不分先后。作為修飾符,與其他修飾符不分先后。 6、覆蓋與修飾符號(hào)、覆蓋與修飾符號(hào)-2在在overrideoverride語(yǔ)法中,子類中的語(yǔ)法中,子類中的overrideoverride方法的修飾符功能弱于父類中方法的修飾符功能弱于父類中的方法。的方法。修飾符的強(qiáng)弱按照如下順序排列:修飾符的強(qiáng)弱按照如下順序排列:u publicu 缺省(什么修飾符都不要)u protectedu private7、覆蓋與異常轉(zhuǎn)移、覆蓋與異常轉(zhuǎn)移覆蓋的異常列表在設(shè)計(jì)上是希望逐步處理,所以子類的覆蓋的異常列表在設(shè)計(jì)上是希望逐步處理,所以子類的overrideoverride方法方法的異常列表

21、中的異常類不能多于父類的異常列表中的異常類型。的異常列表中的異常類不能多于父類的異常列表中的異常類型。 class ClsSuper public void show() throws Exception class ClsSub extends ClsSuperOverridepublic void show()/語(yǔ)法合法語(yǔ)法合法public void show() throw IOException/語(yǔ)法非法,多于父類的異常列表語(yǔ)法非法,多于父類的異常列表8、阻止繼承與、阻止繼承與final修飾符號(hào)修飾符號(hào)除了防止方法被覆蓋,除了防止方法被覆蓋,JavaJava還引入了防止繼承的語(yǔ)法機(jī)制:

22、還引入了防止繼承的語(yǔ)法機(jī)制:u 在class前加final修飾符。final class ClsSuper/class ClsSuper不能再被繼承。不能再被繼承。 public void show() 9、類型轉(zhuǎn)換、類型轉(zhuǎn)換-1從前面的語(yǔ)法知道,把子類類型的對(duì)象賦值給父類類型的對(duì)象是合法從前面的語(yǔ)法知道,把子類類型的對(duì)象賦值給父類類型的對(duì)象是合法的,類型是自動(dòng)轉(zhuǎn)換的。這種轉(zhuǎn)換是合理的。的,類型是自動(dòng)轉(zhuǎn)換的。這種轉(zhuǎn)換是合理的。u 因?yàn)轭愋娃D(zhuǎn)換實(shí)際的作用是改變了對(duì)象空間的訪問(wèn)范圍。u 子類對(duì)象的訪問(wèn)范圍大于父類類型的范圍。u 子類類型的對(duì)象賦值給父類類型的對(duì)象,只是從大的范圍限制在小的范圍。u

23、當(dāng)從父類類型的對(duì)象賦值給子類類型的對(duì)象,等同于從小范圍擴(kuò)大訪問(wèn)范圍,擴(kuò)大的部分空間可能是合法,也可能不合法,所以父類對(duì)象賦值給子類對(duì)象是不允許的。u 但如果程序員確保擴(kuò)大的空間是合法的,想轉(zhuǎn)換對(duì)象的類型,Java也提供語(yǔ)法進(jìn)行把父類類型的對(duì)象轉(zhuǎn)換為子類類型的對(duì)象。 20 30m_am_aClsSuperClsSub9、類型轉(zhuǎn)換、類型轉(zhuǎn)換-2強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換u 使用強(qiáng)制類型轉(zhuǎn)換,可以把父類類型對(duì)象轉(zhuǎn)換以后賦值給子類類型對(duì)象,但實(shí)際程序運(yùn)行的時(shí)候可能訪問(wèn)不到可能不存在的擴(kuò)展空間,這樣導(dǎo)致錯(cuò)誤。所以建議在對(duì)象強(qiáng)制轉(zhuǎn)換前,先判定他的真正類型后再轉(zhuǎn)換。 ClsSuper o1=new ClsSu

24、per();/合法合法 ClsSub o2=new ClsSub();/合法合法ClsSuper o3=new ClsSub();/合法合法ClsSub o4=new ClsSuper();/非法非法 ClsSub o5=o1;/非法非法ClsSub o6=(ClsSub)o1;/合法,但實(shí)際對(duì)合法,但實(shí)際對(duì)o1擴(kuò)大訪問(wèn)范圍的空間不存在擴(kuò)大訪問(wèn)范圍的空間不存在 if (o1 instanceof ClsSub) ClsSub o6=(ClsSub)o1; elseSystem.out.println(“不能轉(zhuǎn)換不能轉(zhuǎn)換”); 10、類型裝箱與解箱、類型裝箱與解箱在在JDK1.5JDK1.5以后

25、的版本中,以后的版本中,JavaJava語(yǔ)法中還引入了基本類型與語(yǔ)法中還引入了基本類型與WrapWrap類型之類型之間的裝箱間的裝箱(Box)(Box)與解箱與解箱(UnBox)(UnBox)的語(yǔ)法。的語(yǔ)法。傳統(tǒng)方式傳統(tǒng)方式裝箱裝箱/ /解箱方式解箱方式 Integer i=new Integer(“2000”); int j=Value(); Integer i=2000;/ 自動(dòng)裝箱自動(dòng)裝箱 int j=i;/自動(dòng)解箱自動(dòng)解箱11、protected修飾符號(hào)修飾符號(hào)修飾符修飾符protectedprotected是專門爭(zhēng)對(duì)父子繼承類之間的訪問(wèn)限制的。是專門爭(zhēng)對(duì)父子繼承類之間的訪問(wèn)

26、限制的。使用使用protectedprotected修飾的成員,在類塊外,只能由子類訪問(wèn):修飾的成員,在類塊外,只能由子類訪問(wèn):u 不管是直接訪問(wèn),還是使用對(duì)象訪問(wèn)。注意:注意:u 子類包含子類的子類都可以訪問(wèn)。第03節(jié) 根父類:Object類 知識(shí)點(diǎn)預(yù)覽知識(shí)點(diǎn)預(yù)覽# #節(jié)節(jié)知識(shí)點(diǎn)知識(shí)點(diǎn)難點(diǎn)難點(diǎn)重點(diǎn)重點(diǎn)應(yīng)用應(yīng)用3CORE-C04-03 根父類:Object類1、認(rèn)識(shí)Object類2、equals方法使用與繼承3、HashCode方法使用與繼承4、toString方法使用與繼承1、認(rèn)識(shí)、認(rèn)識(shí)Object類類不管繼承或者不繼承,在不管繼承或者不繼承,在JavaJava中所有的類都繼承自中所有的類都

27、繼承自O(shè)bjectObject的類。的類。ObjectObject類類u 提供一個(gè)缺省構(gòu)造器。u 提供一組基本方法。 class ClsSuper public void show() ClsSuper obj=new ClsSuper(); System.out.println(obj.toString();/toString方法來(lái)自方法來(lái)自O(shè)bject類。類。protected Object clone() /克隆克隆boolean equals(Object obj) /相等判定相等判定protected void finalize() /析構(gòu)回調(diào)析構(gòu)回調(diào)Class getClass()

28、 /返回運(yùn)行時(shí)類型返回運(yùn)行時(shí)類型int hashCode() /返回對(duì)象的返回對(duì)象的hash碼碼void notify() /喚醒當(dāng)前對(duì)象監(jiān)視的等待線程喚醒當(dāng)前對(duì)象監(jiān)視的等待線程void notifyAll() /喚醒當(dāng)前對(duì)象監(jiān)視的所有的等待線程喚醒當(dāng)前對(duì)象監(jiān)視的所有的等待線程String toString() /把對(duì)象轉(zhuǎn)換為字符串,把對(duì)象轉(zhuǎn)換為字符串,println打印對(duì)象會(huì)自動(dòng)調(diào)用打印對(duì)象會(huì)自動(dòng)調(diào)用void wait() /讓當(dāng)前線程等待讓當(dāng)前線程等待void wait(long timeout) /讓當(dāng)前線程等待讓當(dāng)前線程等待timeout毫秒毫秒void wait(long timeo

29、ut, int nanos) /讓當(dāng)前線程等待讓當(dāng)前線程等待timeout毫秒毫秒+納秒納秒2、equals方法使用與繼承方法使用與繼承對(duì)象相等的判定對(duì)象相等的判定u 使用=只能判定兩個(gè)對(duì)象是否使用同一空間。無(wú)法判定兩個(gè)對(duì)象的內(nèi)容是否相等。u Object提供equals方法用來(lái)判定兩個(gè)對(duì)象的內(nèi)容是否相等。 equals默認(rèn)的是判定對(duì)象的空間地址相等??梢詏verride該方法來(lái)實(shí)現(xiàn)定制的相等判定規(guī)則。 class ClsSuper private int m_score=20; boolean equals(Object obj) if(obj instanceof ClsSuper)Cls

30、Super o=(ClsSuper)obj;if(o.m_score=this.m_score)/o.m_score可以訪問(wèn)私有成員可以訪問(wèn)私有成員return true; /對(duì)象的分?jǐn)?shù)相等,則對(duì)象等對(duì)象的分?jǐn)?shù)相等,則對(duì)象等elsereturn false; /對(duì)象的分?jǐn)?shù)不等,則對(duì)象不等。對(duì)象的分?jǐn)?shù)不等,則對(duì)象不等。elsereturn false;/類型不同,直接返回不等類型不同,直接返回不等3、hashCode方法使用與繼承方法使用與繼承hashCode()hashCode()方法的作用:方法的作用:u 一般的地方不需要重載hashCode,只有當(dāng)類需要放在HashTable、HashMa

31、p、HashSet等等hash結(jié)構(gòu)的集合時(shí)才會(huì)重載hashCode。規(guī)則:規(guī)則:u 如果hashCode在equals方法中不提供比較信息,則最好保持返回值不變。一般不要求hashCode的值是不變的。u 如果兩個(gè)對(duì)象通過(guò)equals判定相等,則hashCode返回值必須相等。u 如果兩個(gè)對(duì)象通過(guò)equals判定不相等,而hashCode可以返回相等的值。但equals不相等,hashCode返回不同的值可以提高HashTable的性能。 u 建議不同對(duì)象返回不同hashCode。注意:需要注意:需要overrideoverride方法方法equalsequals就一定要就一定要overrideoverride方法方法hashCodehashCode。建。建議使用議使用equalsequals中相關(guān)的成員變量的中相關(guān)的成員變量的hashCodehashCode返回值來(lái)運(yùn)算而成。返

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論