




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
JAVA核心技術(shù)OOP5接口多態(tài)(2)如果基類和派生類中有原型完全相同的方法,那么就形成了方法覆蓋;引用轉(zhuǎn)型是指父類的引用可以指向子類的實例,但反之不可以;在有方法覆蓋的前提下,并且有引用轉(zhuǎn)型的情況,就將形成動態(tài)多態(tài)。本章相關(guān)詞匯單詞說明interface接口,界面implements實現(xiàn)final最終的,決定性的本章目標(biāo)掌握J(rèn)ava接口理解Java接口與多態(tài)的關(guān)系掌握面向接口編程的思想掌握常量接口的使用生活中的接口電腦主板上的PCI插槽的規(guī)范就類似于Java接口聲卡顯卡網(wǎng)卡每種卡的內(nèi)部結(jié)構(gòu)都不相同,可以把聲卡、網(wǎng)卡、顯卡都插在PCI插槽上,而不用擔(dān)心哪個插槽是專門插哪個卡的主板什么是Java接口2-1一個Java接口是一些方法特征的集合,但沒有方法的實現(xiàn)publicinterfacePCI{
publicvoidstart();
publicvoidstop();
}classSoundCardimplementsPCI{publicvoidstart()
{
System.out.println("Dudu...");
}
publicvoidstop()
{
System.out.println("Soundstop!");
}
}Java接口中定義的方法在不同的地方被實現(xiàn),可以具有完全不同的行為這是Java接口,相當(dāng)于主板上的PCI插槽的規(guī)范classNetworkCardimplementsPCI{publicvoidstart()
{
System.out.println("Send...");
}
publicvoidstop()
{
System.out.println("Networkstop!");
}
}聲卡、網(wǎng)卡都實現(xiàn)了PCI插槽的規(guī)范,但行為完全不同什么是Java接口2-2publicclassAssembler{
publicstaticvoidmain(String[]args){
PCInc=newNetworkCard();
PCIsc=newSoundCard();
nc.start();sc.start();
}
}可以使用Java接口標(biāo)識類型運行時,根據(jù)實際創(chuàng)建的對象類型調(diào)用相應(yīng)的方法實現(xiàn)Dudu...Send...控制臺輸出21為什么需要Java接口5-1為各學(xué)校開發(fā)這樣一個小系統(tǒng),包含類型:教員、學(xué)校、打印機,具體要求如下:教員、以及學(xué)校都具有方法:輸出詳細(xì)信息學(xué)校具有屬性:打印機,能夠通過學(xué)校的打印機打印教員或?qū)W校的詳細(xì)信息系統(tǒng)要具備良好的可擴展性與可維護性打印教員學(xué)校教員
詳細(xì)信息學(xué)校
詳細(xì)信息detail方法(輸出詳細(xì)信息)為什么需要Java接口5-2以下這個解決方案中存在著什么問題?publicclassTeacher1{//輸出教員的詳細(xì)信息publicStringdetail(){ return"本人是教員";}}publicclassSchool1{privatePrinterprinter=newPrinter();//輸出學(xué)校的詳細(xì)信息publicStringdetail(){return"這里是學(xué)校";}//使用打印機打印教員信息publicvoidprint(Teacher1t){printer.print(t.detail());}//使用打印機打印學(xué)校信息publicvoidprint(School1s){ printer.print(s.detail());}}publicclassPrinter{publicvoidprint(Stringcontent){System.out.println("開始打?。?);System.out.println(content);}}每增加一種新類型,都需要增加相應(yīng)的print(類型名稱var)方法——程序的可擴展性及可維護性極差——這不符合系統(tǒng)的要求為什么需要Java接口5-3可以通過多態(tài)性解決這個問題嗎?顯然,本系統(tǒng)符合使用多態(tài)性的條件教員學(xué)校detail方法(負(fù)責(zé)輸出詳細(xì)信息)教員
詳細(xì)信息學(xué)校
詳細(xì)信息1221回顧多態(tài)的含義:實現(xiàn)同一個接口,使用不同的實例而執(zhí)行不同操作為什么需要Java接口5-4在這個系統(tǒng)中,存在繼承關(guān)系嗎?教員、學(xué)校屬于兩種不同的類型,無法通過“is-a”找到一個合適的父類教員、學(xué)校都存在一個共同的方法特征:detail,它們對detail方法有各自不同的實現(xiàn)——這完全符合Java接口的定義定義一個Java接口,在其中定義detail方法,但沒有具體實現(xiàn)實現(xiàn)這個Java接口,不同的類對detail方法有不同的具體實現(xiàn)IntroduceableTeacher2(教員)School2(學(xué)校)為什么需要Java接口5-5publicinterfaceIntroduceable{publicStringdetail();}publicclassSchool2
implementsIntroduceable{privatePrinterprinter=newPrinter();//輸出學(xué)校的詳細(xì)信息publicStringdetail(){return"這里是學(xué)校";}//使用學(xué)校打印機打印信息publicvoidprint(Introduceableintro){ printer.print(intro.detail());}}publicclassTeacher2
implementsIntroduceable{//輸出教員的詳細(xì)信息publicStringdetail(){ return"本人是教員";}}通過Java接口,我們同樣可以享受到多態(tài)性的好處,大大提高了程序的可擴展性及可維護性使用print方法時,參數(shù)可以是任何Introduceable接口的實現(xiàn)類的對象,不必再為不同的類型建立不同的print方法了使用了Java接口之后,這個系統(tǒng)有了怎樣的改進?小結(jié)1為剛才完成的系統(tǒng)增加一種新的類型:學(xué)員(Student),具體要求如下:學(xué)員具有detail方法,負(fù)責(zé)輸出學(xué)員詳細(xì)信息能夠通過學(xué)校的打印機打印學(xué)員的詳細(xì)信息系統(tǒng)要具備良好的可擴展性與可維護性編寫測試類StudentTest進行測試,要求:通過學(xué)校的打印機打印學(xué)員的詳細(xì)信息什么是面向接口編程開發(fā)系統(tǒng)時,主體構(gòu)架使用接口,接口構(gòu)成系統(tǒng)的骨架這樣就可以通過更換接口的實現(xiàn)類來更換系統(tǒng)的實現(xiàn)publicclassSchool2implementsIntroduceable{privatePrinterprinter=newPrinter();publicStringdetail(){return"這里是學(xué)校";}//使用學(xué)校打印機打印信息publicvoidprint(Introduceableintro){ printer.print(intro.detail());}}IntroduceableTeacher2(教員)School2(學(xué)校)面向接口編程的示例4-1升級上述的系統(tǒng),要求:打印機有多種類型,比如:黑白打印機、彩色打印機等學(xué)??赡芘鋫淦渲腥我庖豢畲蛴C,負(fù)責(zé)打印教員、或者學(xué)校的詳細(xì)信息系統(tǒng)要具備良好的可擴展性與可維護性print方法(打?。┎噬蛴C黑白打印機黑白內(nèi)容學(xué)校/教員詳細(xì)信息彩色內(nèi)容面向接口編程的示例4-2采用面向接口編程的方式實現(xiàn),以下是三個步驟中的第一步:抽象出Java接口1、分析:黑白、彩色打印機都存在一個共同的方法特征:print黑白、彩色打印機對print方法有各自不同的實現(xiàn)2、結(jié)論:抽象出Java接口PrinterFace,在其中定義方法print3、具體實現(xiàn):publicinterfacePrinterFace{publicvoid
print(Stringcontent);}面向接口編程的示例4-3采用面向接口編程的方式實現(xiàn),以下是三個步驟中的第二步:publicclassColorPrinter
implementsPrinterFace{publicvoid
print(Stringcontent){System.out.println("彩色打?。?);System.out.println(content);}}publicclassBlackPrinter
implementsPrinterFace{publicvoid
print(Stringcontent){System.out.println("黑白打?。?);System.out.println(content);}}實現(xiàn)Java接口1、分析:已經(jīng)抽象出Java接口PrinterFace,并在其中定義了print方法黑白、彩色打印機對print方法有各自不同的實現(xiàn)2、結(jié)論:黑白、彩色打印機都實現(xiàn)PrinterFace接口,各自實現(xiàn)print方法3、具體實現(xiàn):面向接口編程的示例4-4采用面向接口編程的方式實現(xiàn),以下是三個步驟中的第三步:使用Java接口1、分析:主體構(gòu)架使用接口,讓接口構(gòu)成系統(tǒng)的骨架2、結(jié)論:更換實現(xiàn)接口的類就可以更換系統(tǒng)的實現(xiàn)3、具體實現(xiàn):publicclassSchool3implementsIntroduceable{privatePrinterFaceprinter;//打印機
publicvoidsetPrinter(PrinterFacep){this.printer=p;}publicStringdetail(){return"這里是學(xué)校";}publicvoidprint(Introduceableintro){
printer.print(intro.detail());}}publicclassTest{publicstaticvoidmain(String[]args){//創(chuàng)建學(xué)校實例
School3school=newSchool3();//為該學(xué)校配備黑白打印機
school.setPrinter(newBlackPrinter());school.print(school);//為該學(xué)校配備彩色打印機
school.setPrinter(new
ColorPrinter());school.print(school);}}小結(jié)2閱讀如下Java代碼,然后請采用面向接口編程的思想,在空白處填寫正確的代碼publicinterfacePCI{
void
start();
void
stop();
}classSoundCardimplementsPCI{publicvoidstart()
{
System.out.println("Dudu...");
}
publicvoidstop()
{
System.out.println("Soundstop!");
}
}classNetworkCardimplementsPCI{publicvoidstart()
{
System.out.println("Send...");
}
publicvoidstop()
{
System.out.println("Networkstop!");
}
}這是Java接口,相當(dāng)于主板上的PCI插槽的規(guī)范聲卡、網(wǎng)卡都實現(xiàn)了PCI插槽的規(guī)范,但行為完全不同小結(jié)2publicclassMainBoard{
publicvoidusePCICard(______p)
{
p.start();
p.stop();
}
}publicclassAssembler{
publicstaticvoidmain(String[]args)
{
MainBoardmb=newMainBoard();
//在主板上插入網(wǎng)卡
//在主板上插入聲卡
}
}提示:通過這個方法,主板上可以插入任意符合PCI插槽規(guī)范的卡PCInc=newNetworkCard();mb.usePCICard(nc);
PCIsc=newSoundCard();
mb.usePCICard(sc);PCI提示:可以通過更換實現(xiàn)接口的類來更換系統(tǒng)的實現(xiàn)為什么需要常量生活中,一周有七天,如何用代碼表示?publicclassWeek{privateintdays=7;publicstaticvoidmain(String[]args){Weekw=newWeek();System.out.println("一周有"+w.days+"天");}}publicclassWeek{privateintdays=7;publicstaticvoidmain(String[]args){Weekw=newWeek();w.days++;System.out.println("一周有"+w.days+"天");}}一周有7天控制臺輸出然而,總有不盡人意的事情發(fā)生:一周有8天控制臺輸出如何保證變量的值在運行期無法被改變?——使用常量什么是常量常量是一種標(biāo)識符,它的值在運行期間恒定不變常量標(biāo)識符在程序中只能被引用,而不能被重新賦值常量圓周率PI圓周率PI代碼表示方式publicstaticfinaldoublePI=3.46;用法將ang角度轉(zhuǎn)換成徑度publicstaticdoubletoRadians(doubleang){returnang/180.0*PI;}常量的優(yōu)點如果不使用常量,直接在程序中填寫數(shù)字或字符串,將會有什么麻煩?publicstaticdoubletoRadians(doubleang){returnang/180.0*3.46;}publicstaticdoubletoDegrees(doubleang){returnang*180.0/3.46;}publicstaticfinaldoublePI=3.46;//圓周率publicstaticdoubletoRadians(doubleang){returnang/180.0*PI;}publicstaticdoubletoDegrees(doubleang){returnang*180.0/PI;}程序的可讀性變差:用戶很難理解數(shù)字或字符串的意思程序的可維護性變差:如果數(shù)值改變,則需要在很多地方改動,既麻煩又易出錯使用常量可以增強程序的可讀性、可維護性Java中常量的定義規(guī)則加入final關(guān)鍵字代表常量,加入static關(guān)鍵字代表類變量盡量使用含義直觀的常量來表示那些將在程序中多次出現(xiàn)的數(shù)字或字符串publicclassStudent{publicstaticfinalintFEMALE=1;//代表女性publicstaticfinalintMALE=2;//代表男性privateintsex;//性別publicvoidsetSex(intsex){if(sex==FEMALE) System.out.println("這是一名女學(xué)生");elseif(sex==MALE) System.out.println("這是一名男學(xué)生");this.sex=sex;}}在Java接口中聲明常量在Java接口中聲明的變量在編譯時會自動加上staticfinal的修飾符,即聲明為常量,因而Java接口通常是存放常量的最佳地點publicinterfaceSchoolType{
publicstaticfinalStringSCHOOL=“廈門大學(xué)";}publicinterfaceSchoolType{StringSCHOOL=“廈門大學(xué)";}等同于26final關(guān)鍵字在Java中,final關(guān)鍵字有最終的,不可修改的含義;final關(guān)鍵字有三種用途,可以分別應(yīng)用于變量、成員方法和類。27final修飾變量如果將某個變量修飾為final,那么該變量就成為常量,一般語法:
[訪問權(quán)限]final
數(shù)據(jù)類型常量名=值;如:
final
doublePI=3.14159; PI成為常量,其后任何試圖對PI進行賦值的語句都將報錯;常量在聲明時必須初始化。28final修飾方法如果將某個成員方法修飾為final,則意味著該方法不能被子類覆蓋,一般語法:
[訪問權(quán)限]final
返回值類型方法名(參數(shù)列表){
…… }如:
public
final
voidfun(){
…… }
如果在派生類中出現(xiàn)同原型的方法,將會報錯。29final修飾類如果將某個類修飾為final,則說明該類無法被繼承,一般語法:
[訪問權(quán)限]final
class
類名{
成員列表
}如:
public
final
classMyClass{
…… }
任何類想繼承于MyClass類都將報錯。30類與類之間的關(guān)系類與類之間的關(guān)系一般來說有兩種:“有”關(guān)系和“是”關(guān)系;所謂“是”關(guān)系就是指類的繼承關(guān)系。如:從動物類派生出哺乳動物類,那么可以說哺乳動物是動物;而“有”關(guān)系是指在一個類中包含了另一個類的對象,即一個類中有另一個類(的對象
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年高中語文 第四單元 文言文(3)第15課 陳情表教學(xué)設(shè)計 粵教版必修5
- 18囊螢夜讀教學(xué)設(shè)計-2023-2024學(xué)年四年級下冊語文統(tǒng)編版
- Unit 2 Travelling around the world 第3課時Listening (p.24),Speaking (p.27) 教案 2024-2025學(xué)年滬教版(2024)七年級英語下冊
- 2024-2025學(xué)年高中生物 第二章 基因和染色體的關(guān)系 第1節(jié) 減數(shù)分裂和受精作用 二 受精作用教學(xué)設(shè)計2 新人教版必修2
- 2024秋三年級英語上冊 Unit 1 Hello Part B第一課時教學(xué)設(shè)計 人教PEP
- Module 9 Unit 1 Im going to do long jump. (教學(xué)設(shè)計)-2023-2024學(xué)年外研版(一起)英語三年級上冊
- 5 國家機構(gòu)有哪些 第二課時 國家機關(guān)的產(chǎn)生(教學(xué)設(shè)計)-部編版道德與法治六年級上冊
- 11《軍神》(教學(xué)設(shè)計)2023-2024學(xué)年統(tǒng)編版語文五年級下冊
- 七年級地理下冊 第七章 第4節(jié)《俄羅斯》教學(xué)設(shè)計 (新版)新人教版
- 三年級道德與法治下冊 第四單元 多樣的交通和通信 12 慧眼看交通教學(xué)設(shè)計2 新人教版
- 2025年超高功率大噸位電弧爐項目建議書
- 浙江省杭州市蕭山區(qū)2022-2023學(xué)年第二學(xué)期四年級科學(xué)期中試題(含答案)
- 寵物殯葬創(chuàng)新創(chuàng)業(yè)
- 2024年黑龍江出版集團招聘筆試真題
- 2024年4月27日浙江省事業(yè)單位招聘考試《職業(yè)能力傾向測驗》真題及答案
- 2025年上半年上海青浦新城發(fā)展(集團)限公司自主招聘9名易考易錯模擬試題(共500題)試卷后附參考答案
- 小學(xué)數(shù)學(xué)教學(xué)中錯題資源的有效利用研究論文
- 2025年山西電力職業(yè)技術(shù)學(xué)院單招職業(yè)技能考試題庫及答案1套
- 2025年高考預(yù)測猜題 化學(xué) 信息必刷卷02(新高考 通 用)(解析版)
- 3.2依法行使權(quán)利 課件 -2024-2025學(xué)年統(tǒng)編版道德與法治八年級下冊
- 2025年洛陽科技職業(yè)學(xué)院單招職業(yè)技能測試題庫及答案(考點梳理)
評論
0/150
提交評論