![java核心技術(shù)接口與內(nèi)部類_第1頁](http://file4.renrendoc.com/view/6c94fd6f01810ef3e92b1eb383da6f29/6c94fd6f01810ef3e92b1eb383da6f291.gif)
![java核心技術(shù)接口與內(nèi)部類_第2頁](http://file4.renrendoc.com/view/6c94fd6f01810ef3e92b1eb383da6f29/6c94fd6f01810ef3e92b1eb383da6f292.gif)
![java核心技術(shù)接口與內(nèi)部類_第3頁](http://file4.renrendoc.com/view/6c94fd6f01810ef3e92b1eb383da6f29/6c94fd6f01810ef3e92b1eb383da6f293.gif)
![java核心技術(shù)接口與內(nèi)部類_第4頁](http://file4.renrendoc.com/view/6c94fd6f01810ef3e92b1eb383da6f29/6c94fd6f01810ef3e92b1eb383da6f294.gif)
![java核心技術(shù)接口與內(nèi)部類_第5頁](http://file4.renrendoc.com/view/6c94fd6f01810ef3e92b1eb383da6f29/6c94fd6f01810ef3e92b1eb383da6f295.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第六章接口與內(nèi)部類
/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第1頁本章導(dǎo)讀:6.1接口6.2對象與克隆6.3接口與回調(diào)6.4內(nèi)部類6.5代理重難點(diǎn):接口、對象與克隆、接口與回調(diào)、內(nèi)部類/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第2頁接口定義:接口是一個(gè)與類相同結(jié)構(gòu),但接口不是類,而是一組對類要求,這些類要與接口一致一個(gè)類能夠?qū)崿F(xiàn)一個(gè)或多個(gè)接口,并在需要接口地方,隨時(shí)使用實(shí)現(xiàn)了對應(yīng)接口對象接口使用*/將類申明為給定接口*/ClassEmployeeimplementsComparable<Employee>{/*對接口中方法進(jìn)行定義*/Publicintcomparator(Employeeother){If(salary<other.salary)return-1;If(salary>other.salary)return1;Return0;}····}
/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第3頁類特征:接口不是類,不能用new運(yùn)算符實(shí)例化一個(gè)接口:eg:x=newComparable(···);//錯(cuò)誤能夠申明接口變量,接口變量必須引用實(shí)現(xiàn)了接口類對象eg:Comparablex;//正確可使用instance檢驗(yàn)一個(gè)對象是否實(shí)現(xiàn)了某特定接口與能夠建立類繼承關(guān)系一樣,接口也能夠被擴(kuò)展接口中不能包含實(shí)例域或靜態(tài)方法,但卻能夠包含常量每個(gè)類只能有一個(gè)超類,但能夠?qū)崿F(xiàn)多個(gè)接口eg:classEmployeeimplementsCloneable,Comparable/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第4頁接口和抽象類比較:接口:方法都是抽象一個(gè)類可是同時(shí)實(shí)現(xiàn)多個(gè)接口Java語言利用接口機(jī)制來實(shí)現(xiàn)C++中多繼承大部分功效接口能繼承多個(gè)接口但不能實(shí)現(xiàn)另一個(gè)接口類假如實(shí)現(xiàn)了一個(gè)接口,那么必須實(shí)現(xiàn)接口里面全部抽象方法,不然類要被定義為抽象類接口只能定義靜態(tài)常量接口不包含結(jié)構(gòu)方法抽象類:能夠含有非抽象方法一個(gè)類自能派生自一個(gè)抽象類假如將一個(gè)類申明為abstract,這類不能生成對象,只能被繼承使用子類繼承抽象類必須實(shí)現(xiàn)其中抽象方法,除非子類為抽象類抽象類能夠定義普通常量抽象類能夠有結(jié)構(gòu)方法以被繼承類擴(kuò)充/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第5頁對象克?。嚎截愒甲兞亢涂截愖兞恳猛粋€(gè)對象克隆變量初始態(tài)與原始變量相同,但以后能夠各自改變/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第6頁淺拷貝是指對象中基本數(shù)據(jù)類型得到拷貝,而引用數(shù)據(jù)類型并未拷貝深拷貝是指實(shí)現(xiàn)對象中基本數(shù)據(jù)類型和引用數(shù)據(jù)類型拷貝。/11/1Friday對象A子對象A1淺拷貝對象B淺拷貝:得到對象B但子對象A1和A2并沒有被拷貝子對象A2深拷貝:得到對象C且子對象A1和A2均被拷貝子對象A2子對象A2對象A深拷貝對象B子對象B1子對象B2java核心技術(shù)接口與內(nèi)部類第7頁默認(rèn)克隆操作是淺拷貝對于每個(gè)類需要以下判斷:1)默認(rèn)clone方法能否滿足要求2)默認(rèn)clone方法是否能夠經(jīng)過調(diào)用可變子對象clone得到修補(bǔ)3)是否不應(yīng)該使用clone實(shí)現(xiàn)深拷貝,類必須:1)實(shí)現(xiàn)Cloneable接口2)使用public訪問修飾符重新定義clone方法/11/1Friday/*實(shí)現(xiàn)cloneable接口*/ClassEmployeeimplementsCloneable{/*將clone重定義為public,調(diào)用super.clone*/PbulicObjectclone(){
try{Employeecloned=(Employee)super.clone();Cloned.hirdDay=(Date)hireDay.clone();Returncloned;}Catch(CloneNotSupportedExceptione){Returnnull;}}}java核心技術(shù)接口與內(nèi)部類第8頁接口與回調(diào):回調(diào)模式是一個(gè)常見編程模式,如C/C++中回調(diào)函數(shù)經(jīng)過將回調(diào)函數(shù)地址傳給調(diào)用者從而實(shí)現(xiàn)調(diào)用回調(diào)技術(shù)一個(gè)經(jīng)典應(yīng)用是用于事件處理Java中使用接口能夠?qū)崿F(xiàn)回調(diào)模式ClassTimePrinterimplementsActionListener{publicvoidactionPerformed(ActionEventevent){Datenow=newDate();System.out.println(“Atthetone,thetimeis”+now);Toolkit.getDefaultToolkit().beep();}}ActionListenerlistener=newTimePrinter();//接口變量中存放對象引用Timert=newTimer(10000,listener);t.start();//接口回調(diào)/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第9頁內(nèi)部類定義:內(nèi)部類是定義在另一個(gè)類中類使用內(nèi)部類主要原因:內(nèi)部類方法能夠訪問該類定義所在作用域中數(shù)據(jù),包含私有數(shù)據(jù)數(shù)據(jù)內(nèi)部類能夠被同一個(gè)包中其它類隱藏起來當(dāng)想要定義一個(gè)回調(diào)函數(shù)且不想編寫大量代碼,使用匿名內(nèi)部類比較便捷申明在接口中內(nèi)部類自動(dòng)成為static和public類型。/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第10頁publicclassTalkingClock{publicTalkingClock(intinterval,Booleanbeep){···}
publicvoidstart(){···}privateintintereval;
privateintbooleanbeep;/*定義一個(gè)TimePriter內(nèi)部類*/
publicclassTimePrinterimplementsActionListener{
publicvoidactionPerformed(ActionEventevent){Datenow=newDate();System.out.println(“Atthetone,thetimeis”+now);/*內(nèi)部類能夠訪問外部類數(shù)據(jù)*/Toolkit.getDefaultToolkit().beep();}}/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第11頁內(nèi)部類特殊語法規(guī)則:內(nèi)部類對于外部引用正確語法是:
OuterClass.this--表示了外部類一個(gè)引用。 如:InterestAddr是BankAccount中內(nèi)部類,其中InterestAddr中actionPerfomed方法引用BankAccount中變量采取方式是:
publicvoidactionPerformed(ActionEventevent){ doubleinterest= BankAccount.this.balance*this.rate/100; }內(nèi)部類對象結(jié)構(gòu)器能夠顯式表示,語法以下:
ActionListeneraddr=this.new.InterestAddr(constructionparameters); Notes:若內(nèi)部類InterestAddr是個(gè)公有類,那么在程序其它地方使用BankAccount.InterestAddr來引用它。/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第12頁局部內(nèi)部類定義在外部類方法中類;1)局部內(nèi)部類不使用訪問指示符,它們范圍總是限定在他們程序塊中;2)局部內(nèi)部類含有最大隱藏性;3)局部內(nèi)部類能夠訪問外部類所在方法中局部變量,但局部變量必須申明為final類型。4)局部類方法只能使用那些申明為final局部變量,因?yàn)樯昝鳛閒inal變量后,變量就不可能隨便進(jìn)行修改,這么,局部變量和局部類所建立變量拷貝總是含有相同值/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第13頁匿名內(nèi)部類:只創(chuàng)建這個(gè)類一個(gè)對象,就無須為它命名了,這種類被稱為匿名內(nèi)部類。匿名內(nèi)部類語法:
newSuperType(constrcutionparameters){
內(nèi)部類方法和數(shù)據(jù);
} newinterfacename(constrcutionparameters){ 內(nèi)部類方法和數(shù)據(jù);
}匿名內(nèi)部類主要用在方便地定義運(yùn)行時(shí)回調(diào),以及編寫事件驅(qū)動(dòng)方面。因?yàn)榻Y(jié)構(gòu)器名字必須和類名相同,而匿名類沒有類名,所以匿名類不能有結(jié)構(gòu)器。/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第14頁靜態(tài)內(nèi)部類:假如只想內(nèi)部類隱藏在另一個(gè)類中,而不需要內(nèi)部類含有對外部類對象引用,這種情況下,就能夠?qū)?nèi)部類申明為static類型,形成靜態(tài)內(nèi)部類。靜態(tài)內(nèi)部類假如在一個(gè)方法中結(jié)構(gòu),這個(gè)方法必須是靜態(tài)方法。靜態(tài)內(nèi)部類對象除了沒有對生成它外圍類對象引用特權(quán)外,與其它內(nèi)部類完全一樣。/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第15頁代理:要?jiǎng)?chuàng)建一個(gè)代理對象,需用Proxy類newProxyInstance方法。方法中三個(gè)參數(shù):1)一個(gè)類加載器。不一樣類能夠使用不一樣類加載器2)一個(gè)class對象數(shù)組,每個(gè)元素都是要實(shí)現(xiàn)接口;3)一個(gè)調(diào)用處理器。使用代理原因:路由對遠(yuǎn)程服務(wù)器方法調(diào)用在程序運(yùn)行期間,將用戶接口事件與動(dòng)作關(guān)聯(lián)起來為調(diào)試,跟蹤方法調(diào)用/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第16頁代理類特征:代理類是在程序運(yùn)行過程中創(chuàng)建,一旦創(chuàng)建就與常規(guī)類沒有區(qū)分。代理(Proxy)類只有一個(gè)實(shí)例域,即調(diào)用處理器,代理類需要額外數(shù)據(jù)都必須存放在調(diào)用處理器中對于特定類加載器和接口來說,只能有一個(gè)代理類。
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年社會人文科學(xué)研究服務(wù)合作協(xié)議書
- 第1課 古代埃及(教學(xué)設(shè)計(jì))-2024-2025學(xué)年九年級歷史上冊素養(yǎng)提升教學(xué)設(shè)計(jì)(統(tǒng)編版)
- 成功訓(xùn)練-挑戰(zhàn)迷宮(教學(xué)設(shè)計(jì))長春版三年級下冊綜合實(shí)踐活動(dòng)
- 第1課《在線學(xué)習(xí)》教學(xué)設(shè)計(jì) 2023-2024學(xué)年浙教版(2023)初中信息技術(shù)八年級上冊
- Unit 7 Happy Birthday Section B(1a-2b)教學(xué)設(shè)計(jì)-2024-2025學(xué)年人教版(2024)七年級英語上冊
- 第5課 第二子目 古代朝鮮與日本文化 教學(xué)設(shè)計(jì)-2023-2024學(xué)年高二下學(xué)期歷史統(tǒng)編版(2019)選擇性必修3文化交流預(yù)傳播
- XXXX學(xué)年第二學(xué)期學(xué)校政教處工作計(jì)劃范文
- 小學(xué)信息技術(shù)一年級上冊第18課《修正并展示圖片》教學(xué)設(shè)計(jì)
- 第7課 隋唐制度的變化與創(chuàng)新 教學(xué)設(shè)計(jì)-2024-2025學(xué)年高一上學(xué)期統(tǒng)編版(2019)必修中外歷史綱要上
- 小升初、小學(xué)生滿分優(yōu)秀作文匯編100篇
- 次聲波在臨床醫(yī)學(xué)及麻醉中的作用 次聲波在臨床麻醉中的作用
- 2022年云南省中考數(shù)學(xué)試題及答案解析
- 完整版新能源汽車充電站應(yīng)急預(yù)案
- TS16949五大工具:SPC
- 五年級下冊-綜合實(shí)踐教案
- 貴州出版社小學(xué)五年級下冊綜合實(shí)踐活動(dòng)教案全冊
- 依據(jù)FEM9851所作堆垛機(jī)循環(huán)時(shí)間計(jì)算
- 牛津大學(xué)劍橋大學(xué)介紹課件
- 胎心監(jiān)護(hù)及判讀學(xué)習(xí)教案
- SAP-ABAP-實(shí)用培訓(xùn)教程
評論
0/150
提交評論