




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第六章第六章 面向?qū)ο螅ㄏ拢┟嫦驅(qū)ο螅ㄏ拢?主要內(nèi)容l this與與superl 構(gòu)造方法的多態(tài)與繼承構(gòu)造方法的多態(tài)與繼承l(wèi) 抽象類與接口抽象類與接口l 引用引用l 類的其他相關(guān)內(nèi)容類的其他相關(guān)內(nèi)容36.1 this與super 6.1.1 this的用法的用法this指代指代當(dāng)前對(duì)象當(dāng)前對(duì)象 this()this.成員變量成員變量 this.成員方法成員方法this當(dāng)參數(shù)傳遞給其他方法當(dāng)參數(shù)傳遞給其他方法【例【例6.1】46.1.2 supersuper引用當(dāng)前對(duì)象繼承自父類的成員引用當(dāng)前對(duì)象繼承自父類的成員 super.數(shù)據(jù)成員數(shù)據(jù)成員 super.成員方法成員方法 super()5 c
2、lass person int age; int height; void eat() void sleep() person() class student extends person int score; student() void study() this可引可引用的范圍用的范圍person()student score study() student() age height eat() sleep() super可引可引用的范圍用的范圍6運(yùn)行結(jié)果如下:運(yùn)行結(jié)果如下:x=4 y=1class name: ax=5 y=1class name: aai am an aaz=10 x=
3、6 super.x=5 y=1 super.y=1【例【例6.2】ax=4;y=1void printme()aax=4;y=1xvoid printme() int z=super.x+6;super.x=5super.printme(); system.out.println(i am an +this.getclass().getname(); 。x = 4 在 子在 子類 對(duì) 象 中類 對(duì) 象 中隱藏隱藏此處調(diào)用的是父類代此處調(diào)用的是父類代碼及對(duì)應(yīng)的父類對(duì)象碼及對(duì)應(yīng)的父類對(duì)象中的屬性成員中的屬性成員。76.2 構(gòu)造函數(shù)的多態(tài)和繼承n一個(gè)類可以定義多個(gè)構(gòu)造函數(shù),構(gòu)造函數(shù)之間用this()
4、相互調(diào)用n構(gòu)造函數(shù)不能被繼承,可以在子類構(gòu)造函數(shù)中用super()調(diào)用父類構(gòu)造函數(shù)【例【例6.3】【例【例6.4】86.3 抽象類抽象類6.3.1 抽象類的定義抽象類的定義用用abstract修飾的類稱為抽象類,修飾的類稱為抽象類,用用abstract修飾的成員修飾的成員方法方法稱為抽象方法。稱為抽象方法。對(duì)于抽象方法,在抽象類中只指定方法名對(duì)于抽象方法,在抽象類中只指定方法名及類型,而不寫實(shí)現(xiàn)代碼。及類型,而不寫實(shí)現(xiàn)代碼。9public abstract class 類名類名 extends 父類名列表父類名列表 /數(shù)據(jù)成員聲明數(shù)據(jù)成員聲明 /抽象方法抽象方法聲明聲明 publicabstr
5、act返回值返回值 方法名方法名(參數(shù)參數(shù)列表列表)throw 異常列表異常列表 【例【例6.5】10 抽象類中可以有抽象類中可以有零個(gè)零個(gè)或或多個(gè)多個(gè)抽象方法,也抽象方法,也可以包含可以包含非抽象非抽象方法。方法。只要有一個(gè)抽象方法,類前就必須有只要有一個(gè)抽象方法,類前就必須有abstract修飾。若沒(méi)有抽象方法,類前也可修飾。若沒(méi)有抽象方法,類前也可有有abstract修飾。修飾。11 抽象類不能創(chuàng)建對(duì)象,創(chuàng)建對(duì)象由具抽象類不能創(chuàng)建對(duì)象,創(chuàng)建對(duì)象由具體子類來(lái)實(shí)現(xiàn),但可以有體子類來(lái)實(shí)現(xiàn),但可以有聲明聲明,聲明能,聲明能引用所有具體子類的對(duì)象。引用所有具體子類的對(duì)象。12 抽象類必定要派生子類
6、,若派生的子類是抽象類必定要派生子類,若派生的子類是具體類,則具體子類中必須實(shí)現(xiàn)抽象類中定具體類,則具體子類中必須實(shí)現(xiàn)抽象類中定義的義的所有抽象方法所有抽象方法(覆蓋);若子類還是抽(覆蓋);若子類還是抽象類,父類中已有的象類,父類中已有的abstract方法,則子類方法,則子類中就不能再有。中就不能再有。 13 在抽象類中,非抽象方法可以調(diào)用抽象在抽象類中,非抽象方法可以調(diào)用抽象方法。方法。 abstract不能與不能與final并列修飾同一個(gè)類;并列修飾同一個(gè)類;abstract 不能與不能與private ,static,final或或 native并列修飾同一個(gè)方法;并列修飾同一個(gè)方法
7、;abstract 類類中不能有中不能有private成員成員 146.3.2 抽象類的產(chǎn)生過(guò)程抽象類形成的思維過(guò)程:客觀事物抽象類形成的思維過(guò)程:客觀事物對(duì)象對(duì)象類類抽象類。抽象類。如:矩形、三角形、圓形類的屬性和方法如圖如:矩形、三角形、圓形類的屬性和方法如圖 :protected int x,y;protected int width,height;public double getperimeter()public double getarea()矩矩形形protected int x,y;protected double radius;public double getperimet
8、er()public double getarea()圓圓(x,y)(x,y)widthheightrxyzwidthheight(x,y)15對(duì)以上三類進(jìn)行抽象對(duì)以上三類進(jìn)行抽象 :public double getperimeter()public double getarea()矩矩形形public double getperimeter()public double getarea()圓圓public double getperimeter()public double getarea()三三角角形形圖64protected int x,y,k;protected double m ;
9、abstract public double getperimeter()abstract public double getarea()s sh ha ap pe es s166.3.3 抽象類在繼承方面的應(yīng)用【例【例6.6】n簡(jiǎn)化子類定義n明晰類的層次關(guān)系17 public double x,y; public double k,m; public double getperimeter() public double getarea()t tr ri ia an ng gl le e public double x,y; public double k,m; public double
10、getperimeter() public double getarea()c ci ir rc cl le et tr ri i6.3.4 引用具體子類對(duì)象【例【例6.7】186.3.5 抽象類設(shè)計(jì)注意事項(xiàng)n抽取同類對(duì)象的共同行為n包含對(duì)象的本質(zhì)n盡可能簡(jiǎn)單196.4 接口(接口(interface)接口的兩種含義:l可以被引用調(diào)用的方法(public方法或同包中的protected方法或默認(rèn)方法);l另一種是同“類”概念地位相當(dāng)?shù)膶S懈拍頸nterface, interface是方法說(shuō)明的集合。20 interface聲明格式 public interface 接口名extends 父接口
11、名列表 /靜態(tài)常量數(shù)據(jù)成員聲明 publicstaticfinal 域類型 域名 = 常量值 /抽象方法聲明 publicabstract返回值 方法名(參數(shù)列表)throw 異常列表 21 定義接口要注意幾點(diǎn)接口定義用關(guān)鍵字interface,而不是用class,interface前的修飾符要么為public,要么為缺省。接口具有繼承性,可通過(guò)extends關(guān)鍵字聲明接口的父接口。22 接 口 定 義 的 數(shù) 據(jù) 成 員 全 是接 口 定 義 的 數(shù) 據(jù) 成 員 全 是 f i n a l static(靜態(tài)常量靜態(tài)常量)。即使沒(méi)有修飾符,其。即使沒(méi)有修飾符,其效果也等效,訪問(wèn)級(jí)別要么為效果
12、也等效,訪問(wèn)級(jí)別要么為public,要么為要么為缺省缺省。23 接口中沒(méi)有接口中沒(méi)有構(gòu)造構(gòu)造方法;所有成員方法都是方法;所有成員方法都是抽象方法抽象方法(與抽象類有所不同)。即使沒(méi)(與抽象類有所不同)。即使沒(méi)有修飾符,其效果完全等效,訪問(wèn)級(jí)別要有修飾符,其效果完全等效,訪問(wèn)級(jí)別要么為么為public,要么為,要么為缺省缺省。注:方法前不。注:方法前不能修飾為能修飾為final。246.4.2 接口的角色 接口扮演將實(shí)現(xiàn)者和使用者有機(jī)聯(lián)系到一起的角色。256.4.3 接口實(shí)現(xiàn)與使用給接口中的方法定義具體的操作就是接口的實(shí)現(xiàn)在類的聲明中用implements子句來(lái)表示一個(gè)類實(shí)現(xiàn)了某個(gè)接口。26 接
13、口實(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)常量。27 如果實(shí)現(xiàn)某接口的類不是如果實(shí)現(xiàn)某接口的類不是abstract的抽的抽象類,則類必須實(shí)現(xiàn)接口的象類,則類必須實(shí)現(xiàn)接口的所有所有抽象方法,抽象方法,而且方法頭部分應(yīng)該與接口中的定義完全而且方法頭部分應(yīng)該與接口中的定義完全一致。一致。 如果實(shí)現(xiàn)接口的類是如果實(shí)現(xiàn)接口的類是abstract類,則它類,則它可以不實(shí)現(xiàn)該接口的所有方法??梢圆粚?shí)現(xiàn)該接口的所有方法。28 接口的抽象方法的訪問(wèn)限制符只能
14、為接口的抽象方法的訪問(wèn)限制符只能為缺省或缺省或public,類在實(shí)現(xiàn)方法時(shí),必,類在實(shí)現(xiàn)方法時(shí),必須顯式使用須顯式使用public修飾符,否則將被修飾符,否則將被警告為縮小了接口中定義的方法的訪警告為縮小了接口中定義的方法的訪問(wèn)控制范圍。問(wèn)控制范圍?!纠纠?.8】296.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)306.6 引引 用用
15、l引用如何形成:先聲明,后賦予對(duì)象,引用如何形成:先聲明,后賦予對(duì)象,成為引用。成為引用。l抽象類聲明進(jìn)行引用有什么特點(diǎn)?抽象類聲明進(jìn)行引用有什么特點(diǎn)? 抽象類引用可以指向所有具體子類對(duì)象,抽象類引用可以指向所有具體子類對(duì)象,此概念可以推廣到所有具有父子關(guān)系的類,此概念可以推廣到所有具有父子關(guān)系的類,以及接口和實(shí)現(xiàn)類以及接口和實(shí)現(xiàn)類31l引用可以替換嗎? 替換是有原則的:父類引用可以指向子類對(duì)象,子類聲明不能引用平行級(jí)別的其它類的對(duì)象,也不能引用父類對(duì)象。32l父類聲明和子類聲明引用同一個(gè)子類對(duì)象有什么區(qū)別? 父類聲明是從父類的角度去引用對(duì)象,子類聲明是從子類角度引用對(duì)象。父類引用子類對(duì)象時(shí),
16、可以經(jīng)過(guò)顯式的轉(zhuǎn)化賦給子類的聲明,但子類的引用賦值給父類的聲明則不需要。33l接口聲明進(jìn)行引用有什么特點(diǎn)?接口聲明進(jìn)行引用有什么特點(diǎn)? 只能引用實(shí)現(xiàn)類對(duì)象的接口方法。只能引用實(shí)現(xiàn)類對(duì)象的接口方法。346.7 類的其它相關(guān)內(nèi)容 6.7.1 類的初始化構(gòu)造方法聲明時(shí)初始化靜態(tài)塊實(shí)例塊 35靜態(tài)塊class a static./靜態(tài)塊靜態(tài)塊在類被加載到內(nèi)存時(shí)被執(zhí)行非靜態(tài)成員變量不能在靜態(tài)塊中使用靜態(tài)塊主要用來(lái)初始化靜態(tài)變量及靜態(tài)方法36 class outer static int a=10; static system.out.println(“hi”); a=30; outer()system.
17、out.println(“創(chuàng)建對(duì)象創(chuàng)建對(duì)象”); public static void main(string args) outer outer=new outer(); system.out.println(“hello”); system.out.println(a); 37實(shí)例塊class a ./實(shí)例塊實(shí)例塊在創(chuàng)建類的實(shí)例對(duì)象時(shí)被執(zhí)行實(shí)例塊先于構(gòu)造函數(shù)執(zhí)行38 class outer int a; system.out.println(“實(shí)例塊實(shí)例塊”); a=30; public outer(int a) system.out.println(“構(gòu)造函數(shù)構(gòu)造函數(shù)”); this.a
18、=a; public static void main(string args) outer outer=new outer(10) system.out.println(outer.a); 39 6.7.2 內(nèi)部類內(nèi)部類(inner class ) 在一個(gè)類的內(nèi)部嵌套定義的另一個(gè)類,在一個(gè)類的內(nèi)部嵌套定義的另一個(gè)類,稱為稱為內(nèi)部類內(nèi)部類。包含內(nèi)部類的類稱為。包含內(nèi)部類的類稱為外部外部類類。 40 定義內(nèi)部類與普通類定義基本相同內(nèi)部類如果定義在外部類成員的位置,可看作外部類的成員,能被protected或private修飾內(nèi)部類定義在方法內(nèi),則不能被任何修飾符修飾41種類種類說(shuō)明說(shuō)明 成員類成
19、員類作為類的成員而存在于某個(gè)類作為類的成員而存在于某個(gè)類的內(nèi)部的內(nèi)部靜態(tài)類靜態(tài)類 作為類的靜態(tài)成員而存在于某作為類的靜態(tài)成員而存在于某個(gè)類的內(nèi)部個(gè)類的內(nèi)部匿名類匿名類 存在某個(gè)類內(nèi)部,但無(wú)名稱的存在某個(gè)類內(nèi)部,但無(wú)名稱的類類局部類局部類存在某個(gè)方法內(nèi)部的類存在某個(gè)方法內(nèi)部的類42 成員類(member class)成員類形式如下: class outer class inner 43inner類可以引用outer類的所有成員,包括被private修飾的 class outer private int a=10; void f() class inner int d=a; f(); 44oute
20、r類與inner類成員重名時(shí),利用關(guān)鍵字this引用成員45 class outer int a; class inner int a=20; void f() int a=10; system.out.println(a); system.out.println(this.a); system.out.println(outer.this.a); 46成員類的成員不能為static成員,但允許靜態(tài)常量存在 class outer class inner int a; /可以 void f() /可以 static final int b=10;/可以 static int c; /錯(cuò)誤 st
21、atic void g(). /錯(cuò)誤 47只有創(chuàng)建了outer類對(duì)象之后,才能創(chuàng)建inner類對(duì)象,才能使用inner類的成員 outer out=new outer(); outer.inner in=out.new inner();【例【例6.9】48靜態(tài)類(static class)靜態(tài)類形式如下: class outer static class inner 49靜態(tài)類inner只能引用outer類的static成員,不能引用普通成員 class outer static int a=10; void f() static class inner int d=a;/static變量 f
22、(); /不能引用普通方法 50inner類作為outer類的靜態(tài)成員,可以在不創(chuàng)建outer類對(duì)象的條件下,直接創(chuàng)建inner類對(duì)象 outer.inner in=new outer.inner();【例【例6.10】51 局部類(local class)局部類形式如下: void f() class inner 52局部類與局部變量類似,僅在方法內(nèi)部才可以創(chuàng)建對(duì)象,一旦方法執(zhí)行完畢,就會(huì)釋放內(nèi)存而消亡。53局部類可以引用包含自身的類的所有成員 class outer int a=10; void f() class inner system.out.println(a); 54局部類只能引用方法體內(nèi)的常量,不能訪問(wèn)方法體內(nèi)的局部變量 class outer void f(final int a,int b) int c=10; final int d=40; class inner system.out.println(a); system.out.println(b); /錯(cuò)誤 system.out.println(d); 【例【例6.11】55 匿名類(anonymous class)沒(méi)有類名的內(nèi)部類就是匿名類。用一條語(yǔ)句完成匿名類的定義與實(shí)例創(chuàng)建。 格式
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 定向委托加工合同:度項(xiàng)目
- 煙花爆竹定制加工合同協(xié)議
- 城市規(guī)劃設(shè)計(jì)服務(wù)合同
- 14《普羅米修斯》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年統(tǒng)編版語(yǔ)文四年級(jí)上冊(cè)
- 購(gòu)房者商品房分期付款合同
- 家庭和睦共建合同
- Module 3 Unit 1 What are you doing?(教學(xué)設(shè)計(jì))-2024-2025學(xué)年外研版(三起)英語(yǔ)四年級(jí)上冊(cè)
- 10 我們當(dāng)?shù)氐娘L(fēng)俗2023-2024學(xué)年四年級(jí)下冊(cè)道德與法治同步教學(xué)設(shè)計(jì)(統(tǒng)編版)
- 婚內(nèi)借款合同范本
- 2 江南 教學(xué)設(shè)計(jì)-2024-2025學(xué)年語(yǔ)文一年級(jí)上冊(cè)統(tǒng)編版
- 室內(nèi)墻地磚鋪貼施工技術(shù)交底
- 醫(yī)院培訓(xùn)課件:《成人住院患者靜脈血栓栓塞癥的預(yù)防護(hù)理》
- 國(guó)企單位聘用職業(yè)經(jīng)理人合同范本
- 2024-2030年中國(guó)廢棄電器電子產(chǎn)品回收處理行業(yè)發(fā)展?fàn)顩r及投資規(guī)劃分析報(bào)告版
- 2024年河北省公務(wù)員考試《行測(cè)》真題及答案解析
- 期末復(fù)習(xí)試題(試題)-2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)人教版
- JJF 2161-2024焊接檢驗(yàn)尺校準(zhǔn)規(guī)范
- 《實(shí)踐論》(原文)毛澤東
- 高考化學(xué)一輪復(fù)習(xí)課件微專題19 電解質(zhì)溶液圖像分析
- 2024年中考語(yǔ)文復(fù)習(xí)分類必刷:非連續(xù)性文本閱讀(含答案解析)
- 全國(guó)川教版信息技術(shù)八年級(jí)下冊(cè)第一單元第3節(jié)《打印展示作品》教學(xué)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論