本章主要介紹以下幾個(gè)問(wèn)題ppt課件_第1頁(yè)
本章主要介紹以下幾個(gè)問(wèn)題ppt課件_第2頁(yè)
本章主要介紹以下幾個(gè)問(wèn)題ppt課件_第3頁(yè)
本章主要介紹以下幾個(gè)問(wèn)題ppt課件_第4頁(yè)
本章主要介紹以下幾個(gè)問(wèn)題ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1,本章主要介紹以下幾個(gè)問(wèn)題,1. Java語(yǔ)言的繼承 2. Java語(yǔ)言的多態(tài) 3. Java方法的重載 4. 構(gòu)造函數(shù)的繼承與重載 5. Java語(yǔ)言的包 6. Java語(yǔ)言的接口,2,第五章 繼承與多態(tài),5.1 繼承 1. 繼承和多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)的兩個(gè)重要特點(diǎn)。繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)方法的一個(gè)重要手段,通過(guò)繼承可以更有效地組織程序結(jié)構(gòu),明確類(lèi)間的關(guān)系,充分利用已有的類(lèi)來(lái)完成更復(fù)雜、更深入的開(kāi)發(fā),3,第五章 繼承與多態(tài),5.1 繼承 2. 當(dāng)一個(gè)類(lèi)擁有另一個(gè)類(lèi)的所有數(shù)據(jù)和操作時(shí),就稱(chēng)這兩個(gè)類(lèi)之間存在著繼承關(guān)系。被繼承的類(lèi)稱(chēng)為父類(lèi)或超類(lèi),繼承了父類(lèi)的所有數(shù)據(jù)和操作的類(lèi)就為子類(lèi)。 3.

2、一個(gè)父類(lèi)可以同時(shí)擁有多個(gè)子類(lèi),此時(shí)父類(lèi)實(shí)際是所有子類(lèi)的公共域和公共方法的集合;而每一個(gè)子類(lèi)則是父類(lèi)的特殊化,是對(duì)父類(lèi)公共域和方法在功能、內(nèi)涵方面的擴(kuò)展和延伸,4,第五章 繼承與多態(tài),5.1 繼承 4. 單重繼承是指任何一個(gè)類(lèi)都只有一個(gè)單一的父類(lèi),其結(jié)構(gòu)可以用單純的樹(shù)狀結(jié)構(gòu)來(lái)表示;若一個(gè)類(lèi)有一個(gè)以上的父類(lèi)則稱(chēng)為多重繼承。其結(jié)構(gòu)應(yīng)以復(fù)雜的網(wǎng)狀結(jié)構(gòu)來(lái)表示。Java語(yǔ)言?xún)H支持單重繼承。 5. 在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,采用繼承的方式來(lái)組織設(shè)計(jì)系統(tǒng)中的類(lèi),可以提高程序的抽象程度,更接近人的思維方式,使程序結(jié)構(gòu)更清晰并降低編碼和維護(hù)的工作量,5,第五章 繼承與多態(tài),5.2 Java的繼承 5.2.1 派生子

3、類(lèi) 1. Java語(yǔ)言中類(lèi)的繼承是通過(guò)類(lèi)定義的 extends關(guān)鍵字來(lái)實(shí)現(xiàn)的。即關(guān)鍵字指明了新定義類(lèi)的父類(lèi),從而建立了兩個(gè)類(lèi)之間的繼承關(guān)系,新定義的類(lèi)是子類(lèi),它繼承了父類(lèi)所有非 private的屬性和方法作為自己的成員。 2. 分析圖5-1和例5-1電話(huà)卡類(lèi)的繼承結(jié)構(gòu),6,第五章 繼承與多態(tài),5.2.2 域的繼承與隱藏 1. 域的繼承是指子類(lèi)可以繼承父類(lèi)的所有非私有域。 分析例5-1??梢?jiàn):父類(lèi)的所有非私有域?qū)嶋H是各個(gè)子類(lèi)所擁有的域的集合。 2. 子類(lèi)重新定義一個(gè)與從父類(lèi)那里繼承來(lái)的域變量完全相同的變量,稱(chēng)為域的隱藏,7,第五章 繼承與多態(tài),5.2.2 域的繼承與隱藏 3. 域的隱藏是指子類(lèi)擁

4、有了兩個(gè)相同名字的變量,其中 一個(gè)來(lái)自于父類(lèi),另一個(gè)由自己定義。 4. 當(dāng)子類(lèi)執(zhí)行來(lái)繼承自父類(lèi)的操作時(shí),處理的是繼承父類(lèi)的變量,而當(dāng)子類(lèi)執(zhí)行它自己定義的方法時(shí),所操作的就是它自己定義的變量,而把繼承來(lái)自父類(lèi)的變量“隱藏”起來(lái)。 5. 例5-2,8,第五章 繼承與多態(tài),5.2.3 方法的繼承與覆蓋 1. 方法的繼承:方法的繼承是指父類(lèi)的非私有方法也可以被子類(lèi)繼承。例5-2。 2. 方法的覆蓋:是指子類(lèi)也可以重新定義與父類(lèi)同名的方法,實(shí)現(xiàn)對(duì)父類(lèi)的覆蓋。子類(lèi)在重新定義父類(lèi)已有的方法時(shí)應(yīng)保持與父類(lèi)完全相同的方法名、返回值和參數(shù)列表,否則就不是方法的覆蓋,9,第五章 繼承與多態(tài),5.2.3 方法的繼承與

5、覆蓋 3. 方法的覆蓋與域的隱藏的區(qū)別在于:子類(lèi)隱藏父類(lèi)的域是使父類(lèi)的域不可見(jiàn),而父類(lèi)的同名域在子類(lèi)的對(duì)象中仍然占有獨(dú)立的內(nèi)存空間;而子類(lèi)方法對(duì)父類(lèi)同名方法的覆蓋將清除父類(lèi)方法在內(nèi)存所占用的空間,從而使父類(lèi)方法在子類(lèi)的對(duì)象中不復(fù)存在。 4. 例5-3,10,第五章 繼承與多態(tài),5.2.4 this和super 1. Java系統(tǒng)默任:每個(gè)類(lèi)都缺省地具有 null、this 和 super 三個(gè)域,可以在任意類(lèi)中不加說(shuō)明地直接使用這三個(gè)域。 2. null 代表“空”值,在定義一個(gè)對(duì)象但尚未為其開(kāi)辟內(nèi)存空間時(shí),可以指定這個(gè)對(duì)象為 null,11,第五章 繼承與多態(tài),5.2.4 this和supe

6、r 3. this 表示的是當(dāng)前對(duì)象本身,它實(shí)際代表了當(dāng)前對(duì)象的一個(gè)引用。一個(gè)對(duì)象可以有若干個(gè)引用,this 只是其中的一個(gè)。 4. 例5-4。 5. super 表示的是當(dāng)前對(duì)象的直接父類(lèi)對(duì)象,是對(duì)直接父類(lèi)對(duì)象的引用。 6. 例5-5,12,第五章 繼承與多態(tài),5.2.4 this和super 7. 直接父類(lèi) 例如:A類(lèi)派生出 B類(lèi),B類(lèi)派生出C類(lèi),那么B是C的 “直接父類(lèi)”;A是C的 “祖先類(lèi)”。 同理:Number_PhoneCard 類(lèi)是D200_Card 類(lèi)的 “直接父類(lèi)” ,PhoneCard 類(lèi)是 D200_Card 類(lèi)的 “祖先類(lèi),13,第五章 繼承與多態(tài),5.2.4 this

7、和super 8. 父類(lèi)對(duì)象與子類(lèi)對(duì)象的轉(zhuǎn)換 (1)子類(lèi)對(duì)象可以被視為是其父類(lèi)的一個(gè)對(duì)象。 (2)父類(lèi)對(duì)象不能被當(dāng)作是某一個(gè)子類(lèi)的對(duì)象,14,第五章 繼承與多態(tài),5.2.4 this和super 8. 父類(lèi)對(duì)象與子類(lèi)對(duì)象的轉(zhuǎn)換 (3)如果一個(gè)方法的形式參數(shù)定義的是父類(lèi)對(duì)象,那么調(diào)用這個(gè)方法時(shí),可以使用子類(lèi)對(duì)象作為實(shí)際參數(shù)。 (4)如果父類(lèi)對(duì)象與引用指向的實(shí)際是一個(gè)子類(lèi)對(duì)象,那么這個(gè)父類(lèi)對(duì)象的引用可以用強(qiáng)制類(lèi)型轉(zhuǎn)換轉(zhuǎn)化成子類(lèi)對(duì)象的引用。 9. p102 程序片段,15,第五章 繼承與多態(tài),5.3 多態(tài) 1. 多態(tài)是指一個(gè)程序中,同名的不同方法共存的情況 2. 多態(tài)可通過(guò)子類(lèi)對(duì)父類(lèi)方法的覆蓋實(shí)現(xiàn)多

8、態(tài),也可以利用重載在同一個(gè)類(lèi)中定義多個(gè)同名的不同方法實(shí)現(xiàn)多態(tài)。 3. 方法的重載(同一個(gè)類(lèi)),方法的覆蓋(父類(lèi)和子類(lèi)),域的隱藏(父類(lèi)和子類(lèi),16,第五章 繼承與多態(tài),5.4 Java的重載 1. 方法的重載是實(shí)現(xiàn)Java語(yǔ)言多態(tài)技術(shù)的重要手段。 2. 方法的重載與方法的覆蓋不同,方法的重載不是子類(lèi)對(duì)父類(lèi)同名方法的重新定義,而是同一類(lèi)中若干同名方法的重新定義。 3. 例5-6,17,第五章 繼承與多態(tài),5.5 構(gòu)造函數(shù)的繼承與重載 5.5.1 構(gòu)造函數(shù)的重載 1. 構(gòu)造函數(shù)的主要功能是完成對(duì)類(lèi)對(duì)象的初始化操作。當(dāng)類(lèi)對(duì)象創(chuàng)建時(shí),系統(tǒng)根據(jù)實(shí)參自動(dòng)調(diào)用該類(lèi)相應(yīng)的構(gòu)造函數(shù)初始化該對(duì)象。 2. 構(gòu)造函數(shù)

9、的重載是指在同一個(gè)類(lèi)中存在若干個(gè)具有不同參數(shù)列表的構(gòu)造函數(shù)。 3. P107頁(yè)代碼片斷,18,第五章 繼承與多態(tài),5.5.1 構(gòu)造函數(shù)的重載 4. 當(dāng)一個(gè)構(gòu)造函數(shù)需要調(diào)用另一個(gè)構(gòu)造函數(shù)時(shí),可以使用關(guān)鍵字this,同時(shí)這個(gè)調(diào)用語(yǔ)句應(yīng)該是整個(gè)構(gòu)造函數(shù)的第一個(gè)可執(zhí)行語(yǔ)句。 5. P108頁(yè)代碼片斷,19,第五章 繼承與多態(tài),5.5.2 構(gòu)造函數(shù)的繼承 1. 子類(lèi)無(wú)條件地繼承父類(lèi)不含參數(shù)的構(gòu)造函數(shù)。 2. 如果子類(lèi)自己定義了構(gòu)造函數(shù),則在創(chuàng)建新對(duì)象時(shí),它將先執(zhí)行繼承自父類(lèi)不含參數(shù)的構(gòu)造函數(shù),然后再執(zhí)行自己的構(gòu)造函數(shù),20,第五章 繼承與多態(tài),5.5.2 構(gòu)造函數(shù)的繼承 3. 對(duì)于父類(lèi)含參數(shù)的構(gòu)造函數(shù),

10、子類(lèi)可以通過(guò)在自己的構(gòu)造函數(shù)中使用關(guān)鍵字 super 來(lái)調(diào)用它,但是這個(gè)調(diào)用語(yǔ)句必須是子類(lèi)構(gòu)造函數(shù)的第一個(gè)可執(zhí)行語(yǔ)句。 4. 分析 p109代碼片斷。 5. 例5-7,21,第五章 繼承與多態(tài),5.6 包 5.6.1 創(chuàng)建包 系統(tǒng)自動(dòng)建立“無(wú)名包”:在缺省情況下,系統(tǒng)會(huì)為每一個(gè).java 源文件中定義的所有類(lèi)創(chuàng)建一個(gè)“無(wú)名包”,在包內(nèi)可以相互引用非 private 的域或方法。但是由于“無(wú)名包”沒(méi)有包名,所以“無(wú)名包”中的類(lèi)不能被其它包中的類(lèi)所引用,為此應(yīng)該創(chuàng)建有名包,22,第五章 繼承與多態(tài),5.6.1 創(chuàng)建包 2. 創(chuàng)建有名包的語(yǔ)句格式為 package ; 語(yǔ)句功能:該語(yǔ)句將創(chuàng)建一個(gè)具有

11、指定名字的包,該包將把當(dāng)前. Java 文件中的所有類(lèi)集合到這個(gè)包內(nèi)。 例如:package CardClasses 該語(yǔ)句是在當(dāng)前文件夾下創(chuàng)建一個(gè)名為CardClasses 的子文件夾包,23,第五章 繼承與多態(tài),5.6.1 創(chuàng)建包 又如: package CardSystem.CardClasses 該語(yǔ)句是在當(dāng)前文件夾下創(chuàng)建了兩個(gè)文件夾, 第一個(gè)是在當(dāng)前文件夾下的子文件夾 CardSystem; 第二個(gè)是在CardSystem 下的子文件夾 CardClasses, 當(dāng)前包中的所有類(lèi)均存放在這個(gè)文件夾里。 3. P114頁(yè)的代碼片斷,24,第五章 繼承與多態(tài),5.6.2 包的引用 1.

12、通常一個(gè)類(lèi)只能引用與它在同一個(gè)包中的類(lèi)。若需要引用其它包中的 public 類(lèi),可以采用以下幾種方法。 (1)使用包名、類(lèi)名作為前綴。 (2)加載需要使用的類(lèi)。 如import CardClasses.D200_Card; (3)加載整個(gè)包。如import CardClasses.*; (4)使用環(huán)境變量 CLASSPATH,25,第五章 繼承與多態(tài),5.7 接口 5.7.1 接口概述 1. Java語(yǔ)言的接口是用來(lái)實(shí)現(xiàn)類(lèi)間多重繼承功能的結(jié)構(gòu)。它定義了若干個(gè)抽象方法和常量用以實(shí)現(xiàn)多重繼成的功能。 2. Java語(yǔ)言不支持多重繼承,只支持單重繼承(只有一個(gè)直接父類(lèi))。為了使Java程序的類(lèi)層次結(jié)

13、構(gòu)更加合理,更符合實(shí)際問(wèn)題的需要,我們把用于完成特定功能的若干屬性組織成相對(duì)獨(dú)立的屬性集合。這種屬性的集合就是接口,26,第五章 繼承與多態(tài),5.7.1 接口概述 3. 如前面圖形界面程序中使用的ActionListener就是系統(tǒng)定義的接口,它代表了監(jiān)聽(tīng)并處理動(dòng)作事件的功能,其中包含了一個(gè)抽象方法: public void actionPerformed(ActionEvent e); 4. 所有需要處理動(dòng)作事件的類(lèi)(如單擊按鈕、在文本框中回車(chē)等)都必須具有ActionListener接口定義的功能。具體的說(shuō),就是必須實(shí)現(xiàn)這個(gè)接口,覆蓋actionPerformed()方法,27,第五章 繼

14、承與多態(tài),5.7.2 聲明接口 1. 接口的聲明格式:包括接口頭和接口體兩部分 public interface 接口名extends 父接口名表 publicstaticfinal 域類(lèi)型 域名=常量值; publicabstractnative 返回值 方法名(參數(shù)列表)throw異常列表,28,第五章 繼承與多態(tài),5.7.2 聲明接口 2. 接口是一種特殊的類(lèi),它是由常量和抽象方法組成的特殊類(lèi)。一個(gè)類(lèi)只能有一個(gè)父類(lèi),但可以同時(shí)實(shí)現(xiàn)若干個(gè)接口。 3. interface 是接口定義的關(guān)鍵字。 public接口可以被任意的類(lèi)和接口使用,沒(méi)有public修飾的接口則只能被同一個(gè)包中的其它類(lèi)和接

15、口利用,29,第五章 繼承與多態(tài),5.7.2 聲明接口 4. 接口也有繼承性。定義接口時(shí)可以通過(guò)關(guān)鍵字 extends 說(shuō)明當(dāng)前定義的接口與哪個(gè)接口具有繼承關(guān)系,當(dāng)前接口將繼承父接口所有的屬性和方法。在此一個(gè)接口可以有多個(gè)父接口,它們之間用逗號(hào)分隔,形成父借口列表。 5. 接口體的定義很重要,接口體由兩部分組成,即域的定義和方法的定義兩部分,30,第五章 繼承與多態(tài),5.7.2 聲明接口 6. 接口中的域都必須是public static final,無(wú)論是否顯示地說(shuō)明;接口中的方法都必須是public abstract,無(wú)論是否顯示地說(shuō)明。 7. Java系統(tǒng)類(lèi)庫(kù)中定義了很多接口,如接口DataInput 中定義了大量按數(shù)據(jù)類(lèi)型讀取數(shù)據(jù)的方法,31,第五章 繼承與多態(tài),5.7.3 實(shí)現(xiàn)接口 1. Java聲明的接口僅僅給出了抽象方法,而具體地實(shí)現(xiàn)接口所規(guī)定的功能,還須一個(gè)類(lèi)為接口中的抽象方法定義實(shí)在的方法體,即實(shí)現(xiàn)接口。 2. 類(lèi)實(shí)現(xiàn)接口注意的問(wèn)題。 (1)在類(lèi)的聲明(定義)部分用implements 關(guān)鍵字說(shuō)明該類(lèi)將要實(shí)現(xiàn)那些接口,32

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論