版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第五講 繼承和接口5.1類的繼承5.2 對(duì)象的上轉(zhuǎn)型對(duì)象5.3多態(tài)性5.4 super關(guān)鍵字5.5 接口5.1類的繼承 繼承:是存在于面向?qū)ο蟪绦蛑械膬蓚€(gè)類之間的一種關(guān)系。當(dāng)一個(gè)類A能夠獲取另一個(gè)類B中所有非私有的數(shù)據(jù)和操作的定義作為自己的部分或全部成分時(shí),就稱這兩個(gè)類之間具有繼承關(guān)系。被繼承的類B稱為父類或超類,繼承了父類或超類的數(shù)據(jù)和操作的類A稱為子類。5.1類的繼承 一個(gè)父類可以同時(shí)擁有多個(gè)子類,這時(shí)這個(gè)父類實(shí)際上是所有子類的公共域和公共方法的集合,而每一子類則是父類的特殊化,是在父類的基礎(chǔ)之上對(duì)公共域和方法在功能、內(nèi)涵方面的擴(kuò)展和延伸。 使用繼承具有以下的好處:降低代碼編寫(xiě)中的冗余度,
2、更好地實(shí)現(xiàn)了代碼復(fù)用的功能,提高程序編寫(xiě)的效率。由于降低了代碼的冗余度,使得程序在維護(hù)時(shí)就變得非常的方便。 5.1類的繼承 1、子類 在類的聲明中,通過(guò)使用關(guān)鍵字extends來(lái)創(chuàng)建一個(gè)類的子類,格式如下: class 子類名 extends 父類名 例如: class Students extends People 5.1類的繼承 2、子類的繼承 類可以有兩種重要的成員:成員變量和方法。子類的成員中有一部分是子類自己聲明定義的,另一部分是從它的父類繼承的。 所謂子類繼承父類的成員變量作為自己的一個(gè)成員變量,就好象它們是在子類中直接聲明一樣,可以被子類中自己聲明的任何實(shí)例方法操作。 所謂子類繼
3、承父類的方法作為子類中的一個(gè)方法,就象它們是在子類中直接聲明一樣,可以被子類中自己聲明的任何實(shí)例方法調(diào)用。5.1類的繼承 類中繼承的實(shí)現(xiàn)主要有以下幾個(gè)步驟: 確定父類。 定義子類。它的具體語(yǔ)法是: 類修飾符 class 子類名 extends 父類名 實(shí)現(xiàn)子類的功能。 class A public int a1; private float a2; int getA() return(a1); void setA()class B extends A int b1; String b2; String getB() return(b2); class C extends B int c; in
4、t printC() System. out. println(c); 5.1類的繼承 1)子類和父類在同一包中的繼承性 如果子類和父類在同一個(gè)包中,那么,子類自然地繼承了其父類中不是private的成員變量作為自己的成員變量,并且也自然地繼承了父類中不是private的方法作為自己的方法, 繼承的成員或方法的訪問(wèn)權(quán)限保持不變。 5.1類的繼承 2)子類和父類不在同一包中的繼承性 如果子類和父類不在同一個(gè)包中,那么,子類繼承了父類的protected、public成員變量做為子類的成員變量,并且繼承了父類的protected、public方法為子類的方法, 繼承的成員或方法的訪問(wèn)權(quán)限保持不變。
5、如果子類和父類不在同一個(gè)包里,子類不能繼承父類的友好變量和友好方法。5.1類的繼承 3、成員變量的隱藏和方法的重寫(xiě) 1)隱藏:只要子類中定義的成員變量和父類中的成員變量同名時(shí),子類就隱藏了繼承的成員變量 。 2)重寫(xiě)(覆蓋):指子類中定義一個(gè)方法,并且這個(gè)方法的名字、返回類型、參數(shù)個(gè)數(shù)和類型與從父類繼承的方法完全相同。 3)覆蓋的實(shí)現(xiàn):就是在子類中對(duì)需要覆蓋的父類成員以父類中相同的格式再重新聲明定義一次。這樣就完成了對(duì)父類成員的覆蓋。它是一種很重要的多態(tài)形式。5.1類的繼承 4)被覆蓋的成員的使用 (1)域變量的使用 當(dāng)子類重新定義一個(gè)與從父類那里繼承來(lái)的完全相同的屬性變量時(shí),子類就隱藏了父類
6、的該變量(稱為域變量的隱藏)。對(duì)于域變量的隱藏來(lái)說(shuō),父類定義的域變量在子類對(duì)象實(shí)例化時(shí)仍然分配一個(gè)存儲(chǔ)空間。 當(dāng)子類執(zhí)行繼承自父類的操作時(shí),處理的是繼承自父類的變量,而當(dāng)子類執(zhí)行它自己定義的方法時(shí),所操作的就是它自己定義的變量,而把繼承自父類的變量“隱藏”起來(lái)。5.1類的繼承 (2)方法的使用 當(dāng)子類重新定義與父類同名的方法時(shí),就實(shí)現(xiàn)了對(duì)父類方法的覆蓋(Overload)。 方法的覆蓋與域的隱藏的不同之處在于:子類隱藏父類的域只是使之不可見(jiàn),父類的同名域在子類對(duì)象中仍然占有自己的獨(dú)立內(nèi)存空間;而子類方法對(duì)父類同名方法的覆蓋將清除父類方法占用的內(nèi)存空間,從而使父類方法在子類對(duì)象中不復(fù)存在。5.1
7、類的繼承 方法的覆蓋中需要注意的問(wèn)題是:子類在重新定義父類已有的方法時(shí),應(yīng)保持與父類完全相同的方法頭聲明,即應(yīng)與父類有完全相同的方法名、返回值和參數(shù)列表。否則就不是方法的覆蓋,而是子類定義自己的與父類無(wú)關(guān)的方法,父類的方法未被覆蓋,所以仍然存在。5.1類的繼承 4、final關(guān)鍵字 1)final關(guān)鍵字可以修飾類、成員變量和方法中的參數(shù)。 2)final類不能被繼承,即不能有子類。 3)如果一個(gè)方法被修飾為final方法,則這個(gè)方法不能被重寫(xiě)。 4)如果一個(gè)成員變量被修飾為final的,就是常量,常量必須賦給初值,而且不能再發(fā)生變化。 5)如果方法的參數(shù)被修飾為final的,該參數(shù)的值不能被改
8、變。5.2 對(duì)象的上轉(zhuǎn)型對(duì)象 1)假設(shè)B類是A類子類或間接子類,當(dāng)我們用子類B創(chuàng)建一個(gè)對(duì)象,并把這個(gè)對(duì)象的引用放到A類的對(duì)象中時(shí): A a; B b=new B(); a=b; 稱這個(gè)A類對(duì)象:a,是子類對(duì)象b的上轉(zhuǎn)型對(duì)象。 2)對(duì)象的上轉(zhuǎn)型對(duì)象的實(shí)體是子類負(fù)責(zé)創(chuàng)建的,但上轉(zhuǎn)型對(duì)象會(huì)失去原子類對(duì)象的一些屬性和功能。5.2 對(duì)象的上轉(zhuǎn)型對(duì)象 3)上轉(zhuǎn)對(duì)象不能操作子類新增的成員變量(失掉了這部分屬性);不能使用子類新增的方法(失掉了一些功能)。 4)上轉(zhuǎn)型對(duì)象可以操作子類繼承或隱藏成員變量,也可以使用子類繼承的或重寫(xiě)的方法。 5)上轉(zhuǎn)型對(duì)象操作子類繼承或重寫(xiě)的方法時(shí),就是通知對(duì)應(yīng)的子類對(duì)象去調(diào)用這
9、些方法。因此,如果子類重寫(xiě)了父類的某個(gè)方法后,對(duì)象的上轉(zhuǎn)型對(duì)象調(diào)用這個(gè)方法時(shí),一定是調(diào)用了這個(gè)重寫(xiě)的方法。 6)可以將對(duì)象的上轉(zhuǎn)型對(duì)象再?gòu)?qiáng)制轉(zhuǎn)換到一個(gè)子類對(duì)象,這時(shí),該子類對(duì)象又具備了子類所有屬性和功能。5.3多態(tài)性 1、多態(tài)的概念 多態(tài):是指一個(gè)程序中同名的不同方法共存的情況。 2、實(shí)現(xiàn)多態(tài)的方法 1) 通過(guò)子類對(duì)父類成員的覆蓋實(shí)現(xiàn)多態(tài)。 2) 利用重載在同一個(gè)類中定義多個(gè)同名的不同方法實(shí)現(xiàn)多態(tài)。5.4 abstract 類和abstract方法 1、抽象類和抽象方法 1)抽象類 (1)定義: 在Java中,凡是用abstract修飾符修飾的類稱為抽象類。 (2)格式: 定義一個(gè)抽象類的格式
10、如下: abstract class ClassName . /類的主體部分5.4 abstract 類和abstract方法 2)抽象方法 (1)定義: 在Java中,凡是用abstract修飾符修飾的方法稱為抽象方法。 (2)格式: 定義一個(gè)抽象方法的格式如下: abstract public 方法名(參數(shù)列表);5.4 abstract 類和abstract方法 2、抽象類和一般類的區(qū)別 如果一個(gè)類中含有未實(shí)現(xiàn)的抽象方法,那么這個(gè)類就必須通過(guò)關(guān)鍵字abstract進(jìn)行標(biāo)記聲明為抽象類。 抽象類中可以包含抽象方法,但不是一定要包含抽象方法。它也可以包含非抽象方法和域變量,就像一般類一樣。
11、抽象類是沒(méi)有具體對(duì)象的概念類,也就是說(shuō)抽象類不能實(shí)例化為對(duì)象。 抽象類必須被繼承。子類為它們父類中的所有抽象方法提供實(shí)現(xiàn),否則它們也是抽象類。5.4 abstract 類和abstract方法 和普通的類相比,abstract類可以有abstract方法。對(duì)于abstract方法,只允許聲明,不允許實(shí)現(xiàn),而且不允許使用final修飾abstract方法。 abstract class A abstract int min(int x,int y); int max(int x,int y) return xy?x:y; 5.4 abstract 類和abstract方法 3、abstract類
12、不能用new運(yùn)算創(chuàng)建對(duì)象 對(duì)于abstract類,我們不能使用new運(yùn)算符創(chuàng)建該類的對(duì)象,需產(chǎn)生其子類,由子類創(chuàng)建對(duì)象,如果一個(gè)類是abstract類的子類,它必須具體實(shí)現(xiàn)父類的abstract方法,這就是為什么不允許使用final修飾abstract方法的原因。 一個(gè)abstract類只關(guān)心它的子類是否具有某種功能,并不關(guān)心功能的具體行為,功能的具體行為由子類負(fù)責(zé)實(shí)現(xiàn)。5.4 super關(guān)鍵字 Super關(guān)鍵字主要是用來(lái)調(diào)用父類的成員變量和方法的。 1、使用關(guān)鍵字super調(diào)用父類的構(gòu)造方法 Java中子類不繼承父類的構(gòu)造方法,因此,子類如果想使用父類的構(gòu)造方法,必須且必須使用關(guān)鍵字supe
13、r來(lái)表示,而且super必須是子類構(gòu)造方法中的頭一條語(yǔ)句。 如: class A super(); 5.4 super關(guān)鍵字 2、使用關(guān)鍵字super操作被隱藏的成員變量和方法 如果我們?cè)谧宇愔邢胧褂帽蛔宇愲[藏了的父類的成員變量或方法就可以使用關(guān)鍵字super。 比如:super.x ,super.play()5.5 接口 接口的引入可以克服單繼承的缺點(diǎn),一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。 1、接口的聲明與使用 1)接口聲明 格式: public interface 接口名 extends父接口名列表 2)接口體 接口體中包含常量定義和方法定義兩部分。接口體中只進(jìn)行方法的聲明,不許提供方法的實(shí)現(xiàn),所以,
14、方法的定義沒(méi)有方法體,且用分號(hào)“;”結(jié)尾。如:5.5 接口 interface Printable final int MAX=100; void add(); float sum(float x ,float y); 3)接口的使用 一個(gè)類通過(guò)使用關(guān)鍵字implements 聲明自己使用一個(gè)或多個(gè)接口。如果使用多個(gè)接口,用逗號(hào)隔開(kāi)接口名。如: class A implements Printable,Addable5.5 接口 如果一個(gè)類使用了某個(gè)接口,那么這個(gè)類必須實(shí)現(xiàn)該接口的所有方法,即為這些方法提供方法體 ,但在類中實(shí)現(xiàn)接口的方法時(shí),方法的名字、返回類型、參數(shù)個(gè)數(shù)及類型必須與接口中的完
15、全一致。接口實(shí)現(xiàn)時(shí)必須給出方法體,且一定要用public來(lái)修飾。 2、理解接口 接口的思想在于它可以增加很多類都需要實(shí)現(xiàn)的功能,使用相同的接口類不一定有繼承關(guān)系。 同一個(gè)類也可以實(shí)現(xiàn)多個(gè)接口。接口只關(guān)心功能,并不關(guān)心功能的具體實(shí)現(xiàn)。5.5 接口 在Java中接口是一種專門(mén)的類型。用interface關(guān)鍵字定義接口。 接口中只能定義抽象方法,不能有方法體,一定是public修飾的。 接口中可以定義變量,但實(shí)際上是static final修飾的常量。 接口中不能定義靜態(tài)方法,接口不能包含任何可以執(zhí)行的方法,而抽象類可以。 類可以實(shí)現(xiàn)多個(gè)接口,但只有一個(gè)父類。 接口不是類分級(jí)結(jié)構(gòu)的一部分,而沒(méi)有聯(lián)系
16、的類可以執(zhí)行相同的接口。5.5 接口 3、接口回調(diào) 接口回調(diào)是指:可以把實(shí)現(xiàn)某一接口的類創(chuàng)建的對(duì)象的引用賦給該接口聲明的接口變量中。那么該接口變量就可以調(diào)用被類實(shí)現(xiàn)的接口中的方法。實(shí)際上,當(dāng)接口變量調(diào)用被類實(shí)現(xiàn)的接口中的方法時(shí),就是通知相應(yīng)的對(duì)象調(diào)用接口的方法。 4、接口做參數(shù) 一個(gè)方法的參數(shù)是接口類型,就可以將任何實(shí)現(xiàn)該接口的類的實(shí)例的引用傳遞給該接口參數(shù),接口參數(shù)就可以回調(diào)類實(shí)現(xiàn)的接口方法。5.5 接口 一個(gè)類要實(shí)現(xiàn)接口時(shí),請(qǐng)注意以下問(wèn)題: 在類的聲明部分,用implements關(guān)鍵字聲明該類將要實(shí)現(xiàn)哪些接口。 如果實(shí)現(xiàn)某接口的類不是abstract抽象類,則在類的定義部分必須實(shí)現(xiàn)指定接口
17、的所有抽象方法。 如果實(shí)現(xiàn)某接口的的類是abstract的抽象類,則它可以不實(shí)現(xiàn)該接口所有的方法。但是對(duì)于這個(gè)抽象類任何一個(gè)非抽象的子類而言,它5.5 接口 們父類所實(shí)現(xiàn)的接口中的所有抽象方法都必須有實(shí)在的方法體。 個(gè)類在實(shí)現(xiàn)某接口的抽象方法時(shí),必須使用完全相同方法頭。如果所實(shí)現(xiàn)的方法與抽象方法有相同的方法名和不同的參數(shù)列表,則只是在重載一個(gè)新的方法,而不是實(shí)現(xiàn)已有的抽象方法。 接口的抽象方法的訪問(wèn)限制符都已制定為public,所以類在實(shí)現(xiàn)方法時(shí),必須顯式地使用public修飾符,否則將被系統(tǒng)警告為縮小了接口中定義的方法的訪問(wèn)控制范圍???結(jié)2022/8/2433小結(jié) 1繼承是一種由已有的類創(chuàng)建新類的機(jī)制。利用繼承,我們可以先創(chuàng)建一個(gè)共有屬性的一般類,根據(jù)該一般類再創(chuàng)建具有特殊屬性的新類。2所謂子類繼承父類的成員變量作為自己的一個(gè)成員變量,就好像它們是在子類中直接聲明一樣,可以被子類中自己聲明的任何
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 外幣理財(cái)產(chǎn)品的市場(chǎng)開(kāi)發(fā)與推廣策略考核試卷
- 2025年度資料員勞動(dòng)合同模板:文化創(chuàng)意產(chǎn)業(yè)專用
- 住宅建筑與家庭生活方式考核試卷
- 堅(jiān)果種植的農(nóng)業(yè)資源環(huán)境保護(hù)政策研究考核試卷
- 包裝裝潢的功能性增強(qiáng)研究考核試卷
- 親子養(yǎng)生保健活動(dòng)與互動(dòng)考核試卷
- 降壓斬波電路的課程設(shè)計(jì)
- 2025-2030全球核電用金屬管行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)印刷級(jí)熱敏紙行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 幼兒園美術(shù)防疫課程設(shè)計(jì)
- 【譯林版】六年級(jí)英語(yǔ)(下冊(cè))單詞默寫(xiě)單
- 高中英語(yǔ)名詞性從句講解
- 計(jì)算機(jī)二級(jí)wps題庫(kù)及答案
- 整套課件:工業(yè)催化
- 爆破安全管理知識(shí)培訓(xùn)
- 旅游地理學(xué)教案
- 煤矸石綜合利用途徑課件
- 企業(yè)信息公示聯(lián)絡(luò)員備案申請(qǐng)表
- 衛(wèi)生部關(guān)于發(fā)布《綜合醫(yī)院組織編制原則試行草案》的通知((78)衛(wèi)醫(yī)字第1689號(hào))
- 挑戰(zhàn)杯生命科學(xué)獲獎(jiǎng)作品范例
- 醫(yī)院崗位設(shè)置與人員編制標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論