版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章面向?qū)ο螅ㄏ拢?
第六章面向?qū)ο螅ㄏ拢?主要內(nèi)容this與super構(gòu)造方法的多態(tài)與繼承抽象類與接口引用類的其他相關(guān)內(nèi)容2主要內(nèi)容this與super26.1this與super6.1.1this的用法this指代當(dāng)前對(duì)象this()this.成員變量this.成員方法this當(dāng)參數(shù)傳遞給其他方法【例6.1】36.1this與super6.1.1this的用法【例6.1.2supersuper引用當(dāng)前對(duì)象繼承自父類的成員super.數(shù)據(jù)成員super.成員方法super()46.1.2supersuper引用當(dāng)前對(duì)象繼承自父類的成員classPerson{intage;intheight;voideat(){}voidsleep(){}Person(){}}classStudentextendsPerson{intscore;Student(){}voidstudy(){}}this可引用的范圍Person()Studentscorestudy()Student()
ageheighteat()sleep()super可引用的范圍5classPerson{this可引用的范圍Perso運(yùn)行結(jié)果如下:x=4y=1classname:Ax=5y=1classname:AAIamanAAz=10x=6super.x=5y=1super.y=1【例6.2】Ax=4;y=1Void
Printme(){}AAx=4;y=1xVoidPrintme(){}intz=super.x+6;super.x=5super.Printme();System.out.println("Iaman"+this.getClass().getName());
。。。。。。x=4在子類對(duì)象中隱藏此處調(diào)用的是父類代碼及對(duì)應(yīng)的父類對(duì)象中的屬性成員。6運(yùn)行結(jié)果如下:x=4y=1【例6.2】Ax=4;y=1Vo6.2構(gòu)造函數(shù)的多態(tài)和繼承一個(gè)類可以定義多個(gè)構(gòu)造函數(shù),構(gòu)造函數(shù)之間用this()相互調(diào)用構(gòu)造函數(shù)不能被繼承,可以在子類構(gòu)造函數(shù)中用super()調(diào)用父類構(gòu)造函數(shù)【例6.3】【例6.4】76.2構(gòu)造函數(shù)的多態(tài)和繼承一個(gè)類可以定義多個(gè)構(gòu)造函數(shù),構(gòu)造6.3抽象類6.3.1抽象類的定義用abstract修飾的類稱為抽象類,用abstract修飾的成員方法稱為抽象方法。對(duì)于抽象方法,在抽象類中只指定方法名及類型,而不寫實(shí)現(xiàn)代碼。86.3抽象類6.3.1抽象類的定義8[public]abstractclass類名[extends父類名列表]{//數(shù)據(jù)成員聲明//抽象方法聲明[public][abstract]返回值方法名(參數(shù)列表)[throw異常列表]}【例6.5】9[public]abstractclass類名[ex抽象類中可以有零個(gè)或多個(gè)抽象方法,也可以包含非抽象方法。只要有一個(gè)抽象方法,類前就必須有abstract修飾。若沒(méi)有抽象方法,類前也可有abstract修飾。10抽象類中可以有零個(gè)或多個(gè)抽象方法,也可以包含非抽象方法。1抽象類不能創(chuàng)建對(duì)象,創(chuàng)建對(duì)象由具體子類來(lái)實(shí)現(xiàn),但可以有聲明,聲明能引用所有具體子類的對(duì)象。11抽象類不能創(chuàng)建對(duì)象,創(chuàng)建對(duì)象由具體子類來(lái)實(shí)現(xiàn),但可以有聲明抽象類必定要派生子類,若派生的子類是具體類,則具體子類中必須實(shí)現(xiàn)抽象類中定義的所有抽象方法(覆蓋);若子類還是抽象類,父類中已有的abstract方法,則子類中就不能再有。12抽象類必定要派生子類,若派生的子類是具體類,則具體子類中必在抽象類中,非抽象方法可以調(diào)用抽象方法。abstract不能與final并列修飾同一個(gè)類;abstract不能與private,static,final或native并列修飾同一個(gè)方法;abstract類中不能有private成員13在抽象類中,非抽象方法可以調(diào)用抽象方法。136.3.2抽象類的產(chǎn)生過(guò)程抽象類形成的思維過(guò)程:客觀事物—>對(duì)象—>類—>抽象類。如:矩形、三角形、圓形類的屬性和方法如圖:(x,y)(x,y)widthheightrxyzwidthheight(x’,y’)146.3.2抽象類的產(chǎn)生過(guò)程抽象類形成的思維過(guò)程:客觀事物—對(duì)以上三類進(jìn)行抽象:圖6-415對(duì)以上三類進(jìn)行抽象:圖6-4156.3.3抽象類在繼承方面的應(yīng)用【例6.6】簡(jiǎn)化子類定義明晰類的層次關(guān)系166.3.3抽象類在繼承方面的應(yīng)用【例6.6】簡(jiǎn)化子類定義16.3.4引用具體子類對(duì)象【例6.7】176.3.4引用具體子類對(duì)象【例6.7】176.3.5抽象類設(shè)計(jì)注意事項(xiàng)抽取同類對(duì)象的共同行為包含對(duì)象的本質(zhì)盡可能簡(jiǎn)單186.3.5抽象類設(shè)計(jì)注意事項(xiàng)抽取同類對(duì)象的共同行為186.4接口(interface)接口的兩種含義:可以被引用調(diào)用的方法(public方法或同包中的protected方法或默認(rèn)方法);另一種是同“類”概念地位相當(dāng)?shù)膶S懈拍頸nterface,interface是方法說(shuō)明的集合。196.4接口(interface)接口的兩種含義:19interface聲明格式[public]interface接口名[extends父接口名列表]{//靜態(tài)常量數(shù)據(jù)成員聲明[public][static][final]域類型域名=常量值//抽象方法聲明[public][abstract]返回值方法名(參數(shù)列表)[throw異常列表]}20interface聲明格式[public]inter定義接口要注意幾點(diǎn)接口定義用關(guān)鍵字interface,而不是用class,interface前的修飾符要么為public,要么為缺省。接口具有繼承性,可通過(guò)extends關(guān)鍵字聲明接口的父接口。21定義接口要注意幾點(diǎn)接口定義用關(guān)鍵字interface,而不接口定義的數(shù)據(jù)成員全是finalstatic(靜態(tài)常量)。即使沒(méi)有修飾符,其效果也等效,訪問(wèn)級(jí)別要么為public,要么為缺省。22接口定義的數(shù)據(jù)成員全是finalstatic(靜態(tài)常量接口中沒(méi)有構(gòu)造方法;所有成員方法都是抽象方法(與抽象類有所不同)。即使沒(méi)有修飾符,其效果完全等效,訪問(wèn)級(jí)別要么為public,要么為缺省。注:方法前不能修飾為final。23接口中沒(méi)有構(gòu)造方法;所有成員方法都是抽象方法(與抽象類有所6.4.2接口的角色接口扮演將實(shí)現(xiàn)者和使用者有機(jī)聯(lián)系到一起的角色。246.4.2接口的角色接口扮演將實(shí)現(xiàn)者和使用者有機(jī)聯(lián)系到一6.4.3接口實(shí)現(xiàn)與使用給接口中的方法定義具體的操作就是接口的實(shí)現(xiàn)在類的聲明中用implements子句來(lái)表示一個(gè)類實(shí)現(xiàn)了某個(gè)接口。256.4.3接口實(shí)現(xiàn)與使用給接口中的方法定義具體的操作就是接接口實(shí)現(xiàn)要注意幾點(diǎn)一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,在implements后用逗號(hào)隔開(kāi)多個(gè)接口的名字。一個(gè)接口也可被多個(gè)類來(lái)實(shí)現(xiàn)。接口的實(shí)現(xiàn)者可以繼承接口中定義的常量,其效果等效于在這個(gè)實(shí)現(xiàn)類當(dāng)中定義了一個(gè)靜態(tài)常量。26接口實(shí)現(xiàn)要注意幾點(diǎn)一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,在impleme如果實(shí)現(xiàn)某接口的類不是abstract的抽象類,則類必須實(shí)現(xiàn)接口的所有抽象方法,而且方法頭部分應(yīng)該與接口中的定義完全一致。如果實(shí)現(xiàn)接口的類是abstract類,則它可以不實(shí)現(xiàn)該接口的所有方法。27如果實(shí)現(xiàn)某接口的類不是abstract的抽象類,則類必須實(shí)接口的抽象方法的訪問(wèn)限制符只能為缺省或public,類在實(shí)現(xiàn)方法時(shí),必須顯式使用public修飾符,否則將被警告為縮小了接口中定義的方法的訪問(wèn)控制范圍?!纠?.8】28接口的抽象方法的訪問(wèn)限制符只能為缺省或public,類在實(shí)6.5抽象類與接口抽象類接口共同點(diǎn)二者都可具有抽象方法,都不能實(shí)例化,但都可以有自己的聲明,并能引用子類或?qū)崿F(xiàn)類對(duì)象。不同點(diǎn)屬性變量可以有變量不能有,只能是靜態(tài)常量。成員方法可以有具體方法(而且具體方法可以調(diào)用抽象方法)。如果有方法,則全部是抽象方法。實(shí)現(xiàn)策略必須有子類繼承必須有實(shí)現(xiàn)類實(shí)現(xiàn)擴(kuò)展性弱強(qiáng)296.5抽象類與接口抽象類接口共同點(diǎn)二者都可具有抽6.6引用引用如何形成:先聲明,后賦予對(duì)象,成為引用。抽象類聲明進(jìn)行引用有什么特點(diǎn)?抽象類引用可以指向所有具體子類對(duì)象,此概念可以推廣到所有具有父子關(guān)系的類,以及接口和實(shí)現(xiàn)類306.6引用引用如何形成:先聲明,后賦予對(duì)象,成為引用。3引用可以替換嗎?替換是有原則的:父類引用可以指向子類對(duì)象,子類聲明不能引用平行級(jí)別的其它類的對(duì)象,也不能引用父類對(duì)象。31引用可以替換嗎?31父類聲明和子類聲明引用同一個(gè)子類對(duì)象有什么區(qū)別?父類聲明是從父類的角度去引用對(duì)象,子類聲明是從子類角度引用對(duì)象。父類引用子類對(duì)象時(shí),可以經(jīng)過(guò)顯式的轉(zhuǎn)化賦給子類的聲明,但子類的引用賦值給父類的聲明則不需要。32父類聲明和子類聲明引用同一個(gè)子類對(duì)象有什么區(qū)別?32接口聲明進(jìn)行引用有什么特點(diǎn)?只能引用實(shí)現(xiàn)類對(duì)象的接口方法。33接口聲明進(jìn)行引用有什么特點(diǎn)?336.7類的其它相關(guān)內(nèi)容6.7.1類的初始化構(gòu)造方法聲明時(shí)初始化靜態(tài)塊實(shí)例塊
346.7類的其它相關(guān)內(nèi)容6.7.1類的初始化34靜態(tài)塊classA{static{….}//靜態(tài)塊}靜態(tài)塊在類被加載到內(nèi)存時(shí)被執(zhí)行非靜態(tài)成員變量不能在靜態(tài)塊中使用靜態(tài)塊主要用來(lái)初始化靜態(tài)變量及靜態(tài)方法35靜態(tài)塊classA{35classOuter{staticinta=10;static{System.out.println(“Hi~~”);a=30;}Outer(){System.out.println(“創(chuàng)建對(duì)象”);}publicstaticvoidmain(String[]args){Outerouter=newOuter();System.out.println(“Hello”);System.out.println(a);}}36classOuter{36實(shí)例塊classA{{….}//實(shí)例塊}實(shí)例塊在創(chuàng)建類的實(shí)例對(duì)象時(shí)被執(zhí)行實(shí)例塊先于構(gòu)造函數(shù)執(zhí)行37實(shí)例塊classA{37classOuter{inta;{System.out.println(“實(shí)例塊”);a=30;}publicOuter(inta){System.out.println(“構(gòu)造函數(shù)”);this.a=a;}publicstaticvoidmain(String[]args){Outerouter=newOuter(10)System.out.println(outer.a);}}38classOuter{386.7.2內(nèi)部類(InnerClass)
在一個(gè)類的內(nèi)部嵌套定義的另一個(gè)類,稱為內(nèi)部類。包含內(nèi)部類的類稱為外部類。
396.7.2內(nèi)部類(InnerClass)39定義內(nèi)部類與普通類定義基本相同內(nèi)部類如果定義在外部類成員的位置,可看作外部類的成員,能被protected或private修飾內(nèi)部類定義在方法內(nèi),則不能被任何修飾符修飾40定義內(nèi)部類與普通類定義基本相同40種類說(shuō)明成員類作為類的成員而存在于某個(gè)類的內(nèi)部靜態(tài)類作為類的靜態(tài)成員而存在于某個(gè)類的內(nèi)部匿名類存在某個(gè)類內(nèi)部,但無(wú)名稱的類局部類存在某個(gè)方法內(nèi)部的類41種類說(shuō)明成員類作為類的成員而存在于某個(gè)類的內(nèi)部靜態(tài)類作為成員類(memberclass)成員類形式如下:classOuter{classInner{}}42成員類(memberclass)成員類形式如下:42Inner類可以引用Outer類的所有成員,包括被private修飾的classOuter{privateinta=10;voidf(){…}classInner{intd=a;f();}}43Inner類可以引用Outer類的所有成員,包括被privaOuter類與Inner類成員重名時(shí),利用關(guān)鍵字this引用成員44Outer類與Inner類成員重名時(shí),利用關(guān)鍵字this引用classOuter{inta;classInner{inta=20;voidf(){inta=10;
System.out.println(a);
System.out.println(this.a);
System.out.println(Outer.this.a);}}}45classOuter{45成員類的成員不能為static成員,但允許靜態(tài)常量存在classOuter{classInner{inta;//可以voidf(){…}//可以staticfinalintb=10;//可以staticintc;//錯(cuò)誤staticvoidg(){….}//錯(cuò)誤}}46成員類的成員不能為static成員,但允許靜態(tài)常量存在46只有創(chuàng)建了Outer類對(duì)象之后,才能創(chuàng)建Inner類對(duì)象,才能使用Inner類的成員Outerout=newOuter();Outer.Innerin=out.newInner();【例6.9】47只有創(chuàng)建了Outer類對(duì)象之后,才能創(chuàng)建Inner類對(duì)象,才靜態(tài)類(staticclass)靜態(tài)類形式如下:classOuter{
staticclassInner{}}48靜態(tài)類(staticclass)靜態(tài)類形式如下:48靜態(tài)類Inner只能引用Outer類的static成員,不能引用普通成員classOuter{staticinta=10;voidf(){…}
staticclassInner{intd=a;//static變量f();//不能引用普通方法}}49靜態(tài)類Inner只能引用Outer類的static成員,不能Inner類作為Outer類的靜態(tài)成員,可以在不創(chuàng)建Outer類對(duì)象的條件下,直接創(chuàng)建Inner類對(duì)象Outer.Innerin=newOuter.Inner();【例6.10】50Inner類作為Outer類的靜態(tài)成員,可以在不創(chuàng)建Oute局部類(localclass)局部類形式如下:voidf(){classInner{}}51局部類(localclass)局部類形式如下:51局部類與局部變量類似,僅在方法內(nèi)部才可以創(chuàng)建對(duì)象,一旦方法執(zhí)行完畢,就會(huì)釋放內(nèi)存而消亡。52局部類與局部變量類似,僅在方法內(nèi)部才可以創(chuàng)建對(duì)象,一旦方法執(zhí)局部類可以引用包含自身的類的所有成員classOuter{inta=10;voidf(){classInner{System.out.println(a);}}}53局部類可以引用包含自身的類的所有成員53局部類只能引用方法體內(nèi)的常量,不能訪問(wèn)方法體內(nèi)的局部變量
classOuter{voidf(finalinta,intb){intc=10;finalintd=40;classInner{System.out.println(a);System.out.println(b);//錯(cuò)誤System.out.println(d);}}【例6.11】54局部類只能引用方法體內(nèi)的常量,不能訪問(wèn)方法體內(nèi)的局部變量【例匿名類(anonymousclass)沒(méi)有類名的內(nèi)部類就是匿名類。用一條語(yǔ)句完成匿名類的定義與實(shí)例創(chuàng)建。格式一:classA{}new類A(){//定義類且創(chuàng)建對(duì)象方法體}此時(shí)產(chǎn)生的對(duì)象是類A的子類對(duì)象【例6.12】55匿名類(anonymousclass)沒(méi)有類名的內(nèi)部類就格式二:InterfaceA{}new接口A(){方法體}此時(shí)產(chǎn)生的對(duì)象是接口A的實(shí)現(xiàn)類?!纠?.13】56格式二:【例6.13】56匿名內(nèi)部類的使用原則匿名內(nèi)部類不能有構(gòu)造方法不能定義任何靜態(tài)成員、方法不能被public、protected、private、static修飾只能創(chuàng)建一個(gè)實(shí)例57匿名內(nèi)部類的使用原則576.7.4匿名對(duì)象匿名對(duì)象就是在產(chǎn)生對(duì)象時(shí)沒(méi)有顯式地為這個(gè)對(duì)象建立引用。Personp1=newPerson();p1.shout();改為newPerson().shout();【例6.14】586.7.4匿名對(duì)象匿名對(duì)象就是在產(chǎn)生對(duì)象時(shí)沒(méi)有顯式匿名對(duì)象在兩種情況下經(jīng)常使用:如果對(duì)一個(gè)對(duì)象只需要進(jìn)行一次方法調(diào)用。將匿名對(duì)象作為參數(shù)傳遞給一個(gè)函數(shù)調(diào)用。59匿名對(duì)象在兩種情況下經(jīng)常使用:596.7.5類對(duì)象在java.lang包中有一個(gè)特殊的類——Class(注:同關(guān)鍵字class區(qū)別的地方是首字母大寫),它也繼承Object類。606.7.5類對(duì)象在java.lang包中有一個(gè)特殊的類——通過(guò)調(diào)用對(duì)象方法getClass而得到Class對(duì)象,進(jìn)而我們可以知道類的相關(guān)的一些特性,如:類的名稱、類的包、類的方法、類的父類等?!纠?.15】61通過(guò)調(diào)用對(duì)象方法getClass而得到Class對(duì)象,進(jìn)而我小結(jié) 本章深入介紹了Java面向?qū)ο蟮囊恍└拍?。重點(diǎn)內(nèi)容是引用,因?yàn)镴ava中的封裝、繼承、多態(tài)、抽象類、接口等概念都和引用有關(guān)。62小結(jié) 本章深入介紹了Java面向?qū)ο蟮囊恍└拍?。重點(diǎn)
第六章面向?qū)ο螅ㄏ拢?3
第六章面向?qū)ο螅ㄏ拢?主要內(nèi)容this與super構(gòu)造方法的多態(tài)與繼承抽象類與接口引用類的其他相關(guān)內(nèi)容64主要內(nèi)容this與super26.1this與super6.1.1this的用法this指代當(dāng)前對(duì)象this()this.成員變量this.成員方法this當(dāng)參數(shù)傳遞給其他方法【例6.1】656.1this與super6.1.1this的用法【例6.1.2supersuper引用當(dāng)前對(duì)象繼承自父類的成員super.數(shù)據(jù)成員super.成員方法super()666.1.2supersuper引用當(dāng)前對(duì)象繼承自父類的成員classPerson{intage;intheight;voideat(){}voidsleep(){}Person(){}}classStudentextendsPerson{intscore;Student(){}voidstudy(){}}this可引用的范圍Person()Studentscorestudy()Student()
ageheighteat()sleep()super可引用的范圍67classPerson{this可引用的范圍Perso運(yùn)行結(jié)果如下:x=4y=1classname:Ax=5y=1classname:AAIamanAAz=10x=6super.x=5y=1super.y=1【例6.2】Ax=4;y=1Void
Printme(){}AAx=4;y=1xVoidPrintme(){}intz=super.x+6;super.x=5super.Printme();System.out.println("Iaman"+this.getClass().getName());
。。。。。。x=4在子類對(duì)象中隱藏此處調(diào)用的是父類代碼及對(duì)應(yīng)的父類對(duì)象中的屬性成員。68運(yùn)行結(jié)果如下:x=4y=1【例6.2】Ax=4;y=1Vo6.2構(gòu)造函數(shù)的多態(tài)和繼承一個(gè)類可以定義多個(gè)構(gòu)造函數(shù),構(gòu)造函數(shù)之間用this()相互調(diào)用構(gòu)造函數(shù)不能被繼承,可以在子類構(gòu)造函數(shù)中用super()調(diào)用父類構(gòu)造函數(shù)【例6.3】【例6.4】696.2構(gòu)造函數(shù)的多態(tài)和繼承一個(gè)類可以定義多個(gè)構(gòu)造函數(shù),構(gòu)造6.3抽象類6.3.1抽象類的定義用abstract修飾的類稱為抽象類,用abstract修飾的成員方法稱為抽象方法。對(duì)于抽象方法,在抽象類中只指定方法名及類型,而不寫實(shí)現(xiàn)代碼。706.3抽象類6.3.1抽象類的定義8[public]abstractclass類名[extends父類名列表]{//數(shù)據(jù)成員聲明//抽象方法聲明[public][abstract]返回值方法名(參數(shù)列表)[throw異常列表]}【例6.5】71[public]abstractclass類名[ex抽象類中可以有零個(gè)或多個(gè)抽象方法,也可以包含非抽象方法。只要有一個(gè)抽象方法,類前就必須有abstract修飾。若沒(méi)有抽象方法,類前也可有abstract修飾。72抽象類中可以有零個(gè)或多個(gè)抽象方法,也可以包含非抽象方法。1抽象類不能創(chuàng)建對(duì)象,創(chuàng)建對(duì)象由具體子類來(lái)實(shí)現(xiàn),但可以有聲明,聲明能引用所有具體子類的對(duì)象。73抽象類不能創(chuàng)建對(duì)象,創(chuàng)建對(duì)象由具體子類來(lái)實(shí)現(xiàn),但可以有聲明抽象類必定要派生子類,若派生的子類是具體類,則具體子類中必須實(shí)現(xiàn)抽象類中定義的所有抽象方法(覆蓋);若子類還是抽象類,父類中已有的abstract方法,則子類中就不能再有。74抽象類必定要派生子類,若派生的子類是具體類,則具體子類中必在抽象類中,非抽象方法可以調(diào)用抽象方法。abstract不能與final并列修飾同一個(gè)類;abstract不能與private,static,final或native并列修飾同一個(gè)方法;abstract類中不能有private成員75在抽象類中,非抽象方法可以調(diào)用抽象方法。136.3.2抽象類的產(chǎn)生過(guò)程抽象類形成的思維過(guò)程:客觀事物—>對(duì)象—>類—>抽象類。如:矩形、三角形、圓形類的屬性和方法如圖:(x,y)(x,y)widthheightrxyzwidthheight(x’,y’)766.3.2抽象類的產(chǎn)生過(guò)程抽象類形成的思維過(guò)程:客觀事物—對(duì)以上三類進(jìn)行抽象:圖6-477對(duì)以上三類進(jìn)行抽象:圖6-4156.3.3抽象類在繼承方面的應(yīng)用【例6.6】簡(jiǎn)化子類定義明晰類的層次關(guān)系786.3.3抽象類在繼承方面的應(yīng)用【例6.6】簡(jiǎn)化子類定義16.3.4引用具體子類對(duì)象【例6.7】796.3.4引用具體子類對(duì)象【例6.7】176.3.5抽象類設(shè)計(jì)注意事項(xiàng)抽取同類對(duì)象的共同行為包含對(duì)象的本質(zhì)盡可能簡(jiǎn)單806.3.5抽象類設(shè)計(jì)注意事項(xiàng)抽取同類對(duì)象的共同行為186.4接口(interface)接口的兩種含義:可以被引用調(diào)用的方法(public方法或同包中的protected方法或默認(rèn)方法);另一種是同“類”概念地位相當(dāng)?shù)膶S懈拍頸nterface,interface是方法說(shuō)明的集合。816.4接口(interface)接口的兩種含義:19interface聲明格式[public]interface接口名[extends父接口名列表]{//靜態(tài)常量數(shù)據(jù)成員聲明[public][static][final]域類型域名=常量值//抽象方法聲明[public][abstract]返回值方法名(參數(shù)列表)[throw異常列表]}82interface聲明格式[public]inter定義接口要注意幾點(diǎn)接口定義用關(guān)鍵字interface,而不是用class,interface前的修飾符要么為public,要么為缺省。接口具有繼承性,可通過(guò)extends關(guān)鍵字聲明接口的父接口。83定義接口要注意幾點(diǎn)接口定義用關(guān)鍵字interface,而不接口定義的數(shù)據(jù)成員全是finalstatic(靜態(tài)常量)。即使沒(méi)有修飾符,其效果也等效,訪問(wèn)級(jí)別要么為public,要么為缺省。84接口定義的數(shù)據(jù)成員全是finalstatic(靜態(tài)常量接口中沒(méi)有構(gòu)造方法;所有成員方法都是抽象方法(與抽象類有所不同)。即使沒(méi)有修飾符,其效果完全等效,訪問(wèn)級(jí)別要么為public,要么為缺省。注:方法前不能修飾為final。85接口中沒(méi)有構(gòu)造方法;所有成員方法都是抽象方法(與抽象類有所6.4.2接口的角色接口扮演將實(shí)現(xiàn)者和使用者有機(jī)聯(lián)系到一起的角色。866.4.2接口的角色接口扮演將實(shí)現(xiàn)者和使用者有機(jī)聯(lián)系到一6.4.3接口實(shí)現(xiàn)與使用給接口中的方法定義具體的操作就是接口的實(shí)現(xiàn)在類的聲明中用implements子句來(lái)表示一個(gè)類實(shí)現(xiàn)了某個(gè)接口。876.4.3接口實(shí)現(xiàn)與使用給接口中的方法定義具體的操作就是接接口實(shí)現(xiàn)要注意幾點(diǎn)一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,在implements后用逗號(hào)隔開(kāi)多個(gè)接口的名字。一個(gè)接口也可被多個(gè)類來(lái)實(shí)現(xiàn)。接口的實(shí)現(xiàn)者可以繼承接口中定義的常量,其效果等效于在這個(gè)實(shí)現(xiàn)類當(dāng)中定義了一個(gè)靜態(tài)常量。88接口實(shí)現(xiàn)要注意幾點(diǎn)一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,在impleme如果實(shí)現(xiàn)某接口的類不是abstract的抽象類,則類必須實(shí)現(xiàn)接口的所有抽象方法,而且方法頭部分應(yīng)該與接口中的定義完全一致。如果實(shí)現(xiàn)接口的類是abstract類,則它可以不實(shí)現(xiàn)該接口的所有方法。89如果實(shí)現(xiàn)某接口的類不是abstract的抽象類,則類必須實(shí)接口的抽象方法的訪問(wèn)限制符只能為缺省或public,類在實(shí)現(xiàn)方法時(shí),必須顯式使用public修飾符,否則將被警告為縮小了接口中定義的方法的訪問(wèn)控制范圍?!纠?.8】90接口的抽象方法的訪問(wèn)限制符只能為缺省或public,類在實(shí)6.5抽象類與接口抽象類接口共同點(diǎn)二者都可具有抽象方法,都不能實(shí)例化,但都可以有自己的聲明,并能引用子類或?qū)崿F(xiàn)類對(duì)象。不同點(diǎn)屬性變量可以有變量不能有,只能是靜態(tài)常量。成員方法可以有具體方法(而且具體方法可以調(diào)用抽象方法)。如果有方法,則全部是抽象方法。實(shí)現(xiàn)策略必須有子類繼承必須有實(shí)現(xiàn)類實(shí)現(xiàn)擴(kuò)展性弱強(qiáng)916.5抽象類與接口抽象類接口共同點(diǎn)二者都可具有抽6.6引用引用如何形成:先聲明,后賦予對(duì)象,成為引用。抽象類聲明進(jìn)行引用有什么特點(diǎn)?抽象類引用可以指向所有具體子類對(duì)象,此概念可以推廣到所有具有父子關(guān)系的類,以及接口和實(shí)現(xiàn)類926.6引用引用如何形成:先聲明,后賦予對(duì)象,成為引用。3引用可以替換嗎?替換是有原則的:父類引用可以指向子類對(duì)象,子類聲明不能引用平行級(jí)別的其它類的對(duì)象,也不能引用父類對(duì)象。93引用可以替換嗎?31父類聲明和子類聲明引用同一個(gè)子類對(duì)象有什么區(qū)別?父類聲明是從父類的角度去引用對(duì)象,子類聲明是從子類角度引用對(duì)象。父類引用子類對(duì)象時(shí),可以經(jīng)過(guò)顯式的轉(zhuǎn)化賦給子類的聲明,但子類的引用賦值給父類的聲明則不需要。94父類聲明和子類聲明引用同一個(gè)子類對(duì)象有什么區(qū)別?32接口聲明進(jìn)行引用有什么特點(diǎn)?只能引用實(shí)現(xiàn)類對(duì)象的接口方法。95接口聲明進(jìn)行引用有什么特點(diǎn)?336.7類的其它相關(guān)內(nèi)容6.7.1類的初始化構(gòu)造方法聲明時(shí)初始化靜態(tài)塊實(shí)例塊
966.7類的其它相關(guān)內(nèi)容6.7.1類的初始化34靜態(tài)塊classA{static{….}//靜態(tài)塊}靜態(tài)塊在類被加載到內(nèi)存時(shí)被執(zhí)行非靜態(tài)成員變量不能在靜態(tài)塊中使用靜態(tài)塊主要用來(lái)初始化靜態(tài)變量及靜態(tài)方法97靜態(tài)塊classA{35classOuter{staticinta=10;static{System.out.println(“Hi~~”);a=30;}Outer(){System.out.println(“創(chuàng)建對(duì)象”);}publicstaticvoidmain(String[]args){Outerouter=newOuter();System.out.println(“Hello”);System.out.println(a);}}98classOuter{36實(shí)例塊classA{{….}//實(shí)例塊}實(shí)例塊在創(chuàng)建類的實(shí)例對(duì)象時(shí)被執(zhí)行實(shí)例塊先于構(gòu)造函數(shù)執(zhí)行99實(shí)例塊classA{37classOuter{inta;{System.out.println(“實(shí)例塊”);a=30;}publicOuter(inta){System.out.println(“構(gòu)造函數(shù)”);this.a=a;}publicstaticvoidmain(String[]args){Outerouter=newOuter(10)System.out.println(outer.a);}}100classOuter{386.7.2內(nèi)部類(InnerClass)
在一個(gè)類的內(nèi)部嵌套定義的另一個(gè)類,稱為內(nèi)部類。包含內(nèi)部類的類稱為外部類。
1016.7.2內(nèi)部類(InnerClass)39定義內(nèi)部類與普通類定義基本相同內(nèi)部類如果定義在外部類成員的位置,可看作外部類的成員,能被protected或private修飾內(nèi)部類定義在方法內(nèi),則不能被任何修飾符修飾102定義內(nèi)部類與普通類定義基本相同40種類說(shuō)明成員類作為類的成員而存在于某個(gè)類的內(nèi)部靜態(tài)類作為類的靜態(tài)成員而存在于某個(gè)類的內(nèi)部匿名類存在某個(gè)類內(nèi)部,但無(wú)名稱的類局部類存在某個(gè)方法內(nèi)部的類103種類說(shuō)明成員類作為類的成員而存在于某個(gè)類的內(nèi)部靜態(tài)類作為成員類(memberclass)成員類形式如下:classOuter{classInner{}}104成員類(memberclass)成員類形式如下:42Inner類可以引用Outer類的所有成員,包括被private修飾的classOuter{privateinta=10;voidf(){…}classInner{intd=a;f();}}105Inner類可以引用Outer類的所有成員,包括被privaOuter類與Inner類成員重名時(shí),利用關(guān)鍵字this引用成員106Outer類與Inner類成員重名時(shí),利用關(guān)鍵字this引用classOuter{inta;classInner{inta=20;voidf(){inta=10;
System.out.println(a);
System.out.println(this.a);
System.out.println(Outer.this.a);}}}107classOuter{45成員類的成員不能為static成員,但允許靜態(tài)常量存在classOuter{classInner{inta;//可以voidf(){…}//可以staticfinalintb=10;//可以staticintc;//錯(cuò)誤staticvoidg(){….}//錯(cuò)誤}}108成員類的成員不能為static成員,但允許靜態(tài)常量存在46只有創(chuàng)建了Outer類對(duì)象之后,才能創(chuàng)建Inner類對(duì)象,才能使用Inner類的成員Outerout=newOuter();Outer.Innerin=out.newInner();【例6.9】109只有創(chuàng)建了Outer類對(duì)象之后,才能創(chuàng)建Inner類對(duì)象,才靜態(tài)類(staticclass)靜態(tài)類形式如下:classOuter{
staticclassInner{}}110靜態(tài)類(staticclass)靜態(tài)類形式如下:48靜態(tài)類Inner只能引用Outer類的static成員,不能引用普通成員classOuter{staticinta=10;voidf(){…}
staticclassInner{intd=a;//static變量f();//不能引用普通方法}}111靜態(tài)類Inner只能引用Outer類的static成員,不能Inner類作為Outer類的靜態(tài)成員,可以在不創(chuàng)建Outer類對(duì)象的條件下,直接創(chuàng)建Inner類對(duì)象Outer.Innerin
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年消防給水工程智能化施工及維護(hù)服務(wù)合同3篇
- 2025變頻器代理商銷售合同:產(chǎn)品價(jià)格調(diào)整與結(jié)算協(xié)議3篇
- 2025年度紡織行業(yè)新材料研發(fā)與應(yīng)用采購(gòu)合同2篇
- 2025年度工業(yè)倉(cāng)儲(chǔ)租賃及倉(cāng)儲(chǔ)設(shè)施維護(hù)保養(yǎng)合同范本3篇
- 二零二五年房地產(chǎn)項(xiàng)目工程造價(jià)咨詢合同模板3篇
- 二零二四年員工自愿放棄社保及轉(zhuǎn)移待遇合同3篇
- 2025年度藝術(shù)展布展藝術(shù)品保護(hù)與搬運(yùn)合同3篇
- 二零二五版二手房交易中介服務(wù)合同模板2篇
- 2024虛擬現(xiàn)實(shí)內(nèi)容開(kāi)發(fā)制作合同
- 2025年消防噴淋系統(tǒng)安裝及消防設(shè)施檢測(cè)與維保服務(wù)合同3篇
- 《FANUC-Oi數(shù)控銑床加工中心編程技巧與實(shí)例》教學(xué)課件(全)
- 微信小程序運(yùn)營(yíng)方案課件
- 抖音品牌視覺(jué)識(shí)別手冊(cè)
- 陳皮水溶性總生物堿的升血壓作用量-效關(guān)系及藥動(dòng)學(xué)研究
- 安全施工專項(xiàng)方案報(bào)審表
- 學(xué)習(xí)解讀2022年新制定的《市場(chǎng)主體登記管理?xiàng)l例實(shí)施細(xì)則》PPT匯報(bào)演示
- 好氧廢水系統(tǒng)調(diào)試、驗(yàn)收、運(yùn)行、維護(hù)手冊(cè)
- 中石化ERP系統(tǒng)操作手冊(cè)
- 五年級(jí)上冊(cè)口算+脫式計(jì)算+豎式計(jì)算+方程
- 氣體管道安全管理規(guī)程
- 《眼科學(xué)》題庫(kù)
評(píng)論
0/150
提交評(píng)論