




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章接口與內(nèi)部類
/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第1頁(yè)本章導(dǎo)讀:6.1接口6.2對(duì)象與克隆6.3接口與回調(diào)6.4內(nèi)部類6.5代理重難點(diǎn):接口、對(duì)象與克隆、接口與回調(diào)、內(nèi)部類/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第2頁(yè)接口定義:接口是一個(gè)與類相同結(jié)構(gòu),但接口不是類,而是一組對(duì)類要求,這些類要與接口一致一個(gè)類能夠?qū)崿F(xiàn)一個(gè)或多個(gè)接口,并在需要接口地方,隨時(shí)使用實(shí)現(xiàn)了對(duì)應(yīng)接口對(duì)象接口使用*/將類申明為給定接口*/ClassEmployeeimplementsComparable<Employee>{/*對(duì)接口中方法進(jìn)行定義*/Publicintcomparator(Employeeother){If(salary<other.salary)return-1;If(salary>other.salary)return1;Return0;}····}
/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第3頁(yè)類特征:接口不是類,不能用new運(yùn)算符實(shí)例化一個(gè)接口:eg:x=newComparable(···);//錯(cuò)誤能夠申明接口變量,接口變量必須引用實(shí)現(xiàn)了接口類對(duì)象eg:Comparablex;//正確可使用instance檢驗(yàn)一個(gè)對(duì)象是否實(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頁(yè)接口和抽象類比較:接口:方法都是抽象一個(gè)類可是同時(shí)實(shí)現(xiàn)多個(gè)接口Java語(yǔ)言利用接口機(jī)制來(lái)實(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,這類不能生成對(duì)象,只能被繼承使用子類繼承抽象類必須實(shí)現(xiàn)其中抽象方法,除非子類為抽象類抽象類能夠定義普通常量抽象類能夠有結(jié)構(gòu)方法以被繼承類擴(kuò)充/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第5頁(yè)對(duì)象克?。嚎截愒甲兞亢涂截愖兞恳猛粋€(gè)對(duì)象克隆變量初始態(tài)與原始變量相同,但以后能夠各自改變/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第6頁(yè)淺拷貝是指對(duì)象中基本數(shù)據(jù)類型得到拷貝,而引用數(shù)據(jù)類型并未拷貝深拷貝是指實(shí)現(xiàn)對(duì)象中基本數(shù)據(jù)類型和引用數(shù)據(jù)類型拷貝。/11/1Friday對(duì)象A子對(duì)象A1淺拷貝對(duì)象B淺拷貝:得到對(duì)象B但子對(duì)象A1和A2并沒有被拷貝子對(duì)象A2深拷貝:得到對(duì)象C且子對(duì)象A1和A2均被拷貝子對(duì)象A2子對(duì)象A2對(duì)象A深拷貝對(duì)象B子對(duì)象B1子對(duì)象B2java核心技術(shù)接口與內(nèi)部類第7頁(yè)默認(rèn)克隆操作是淺拷貝對(duì)于每個(gè)類需要以下判斷:1)默認(rèn)clone方法能否滿足要求2)默認(rèn)clone方法是否能夠經(jīng)過(guò)調(diào)用可變子對(duì)象clone得到修補(bǔ)3)是否不應(yīng)該使用clone實(shí)現(xiàn)深拷貝,類必須:1)實(shí)現(xiàn)Cloneable接口2)使用public訪問(wèn)修飾符重新定義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頁(yè)接口與回調(diào):回調(diào)模式是一個(gè)常見編程模式,如C/C++中回調(diào)函數(shù)經(jīng)過(guò)將回調(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();//接口變量中存放對(duì)象引用Timert=newTimer(10000,listener);t.start();//接口回調(diào)/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第9頁(yè)內(nèi)部類定義:內(nèi)部類是定義在另一個(gè)類中類使用內(nèi)部類主要原因:內(nèi)部類方法能夠訪問(wèn)該類定義所在作用域中數(shù)據(jù),包含私有數(shù)據(jù)數(shù)據(jù)內(nèi)部類能夠被同一個(gè)包中其它類隱藏起來(lái)當(dāng)想要定義一個(gè)回調(diào)函數(shù)且不想編寫大量代碼,使用匿名內(nèi)部類比較便捷申明在接口中內(nèi)部類自動(dòng)成為static和public類型。/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第10頁(yè)publicclassTalkingClock{publicTalkingClock(intinterval,Booleanbeep){···}
publicvoidstart(){···}privateintintereval;
privateintbooleanbeep;/*定義一個(gè)TimePriter內(nèi)部類*/
publicclassTimePrinterimplementsActionListener{
publicvoidactionPerformed(ActionEventevent){Datenow=newDate();System.out.println(“Atthetone,thetimeis”+now);/*內(nèi)部類能夠訪問(wèn)外部類數(shù)據(jù)*/Toolkit.getDefaultToolkit().beep();}}/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第11頁(yè)內(nèi)部類特殊語(yǔ)法規(guī)則:內(nèi)部類對(duì)于外部引用正確語(yǔ)法是:
OuterClass.this--表示了外部類一個(gè)引用。 如:InterestAddr是BankAccount中內(nèi)部類,其中InterestAddr中actionPerfomed方法引用BankAccount中變量采取方式是:
publicvoidactionPerformed(ActionEventevent){ doubleinterest= BankAccount.this.balance*this.rate/100; }內(nèi)部類對(duì)象結(jié)構(gòu)器能夠顯式表示,語(yǔ)法以下:
ActionListeneraddr=this.new.InterestAddr(constructionparameters); Notes:若內(nèi)部類InterestAddr是個(gè)公有類,那么在程序其它地方使用BankAccount.InterestAddr來(lái)引用它。/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第12頁(yè)局部?jī)?nèi)部類定義在外部類方法中類;1)局部?jī)?nèi)部類不使用訪問(wèn)指示符,它們范圍總是限定在他們程序塊中;2)局部?jī)?nèi)部類含有最大隱藏性;3)局部?jī)?nèi)部類能夠訪問(wèn)外部類所在方法中局部變量,但局部變量必須申明為final類型。4)局部類方法只能使用那些申明為final局部變量,因?yàn)樯昝鳛閒inal變量后,變量就不可能隨便進(jìn)行修改,這么,局部變量和局部類所建立變量拷貝總是含有相同值/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第13頁(yè)匿名內(nèi)部類:只創(chuàng)建這個(gè)類一個(gè)對(duì)象,就無(wú)須為它命名了,這種類被稱為匿名內(nèi)部類。匿名內(nèi)部類語(yǔ)法:
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頁(yè)靜態(tài)內(nèi)部類:假如只想內(nèi)部類隱藏在另一個(gè)類中,而不需要內(nèi)部類含有對(duì)外部類對(duì)象引用,這種情況下,就能夠?qū)?nèi)部類申明為static類型,形成靜態(tài)內(nèi)部類。靜態(tài)內(nèi)部類假如在一個(gè)方法中結(jié)構(gòu),這個(gè)方法必須是靜態(tài)方法。靜態(tài)內(nèi)部類對(duì)象除了沒有對(duì)生成它外圍類對(duì)象引用特權(quán)外,與其它內(nèi)部類完全一樣。/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第15頁(yè)代理:要?jiǎng)?chuàng)建一個(gè)代理對(duì)象,需用Proxy類newProxyInstance方法。方法中三個(gè)參數(shù):1)一個(gè)類加載器。不一樣類能夠使用不一樣類加載器2)一個(gè)class對(duì)象數(shù)組,每個(gè)元素都是要實(shí)現(xiàn)接口;3)一個(gè)調(diào)用處理器。使用代理原因:路由對(duì)遠(yuǎn)程服務(wù)器方法調(diào)用在程序運(yùn)行期間,將用戶接口事件與動(dòng)作關(guān)聯(lián)起來(lái)為調(diào)試,跟蹤方法調(diào)用/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第16頁(yè)代理類特征:代理類是在程序運(yùn)行過(guò)程中創(chuàng)建,一旦創(chuàng)建就與常規(guī)類沒有區(qū)分。代理(Proxy)類只有一個(gè)實(shí)例域,即調(diào)用處理器,代理類需要額外數(shù)據(jù)都必須存放在調(diào)用處理器中對(duì)于特定類加載器和接口來(lái)說(shuō),只能有一個(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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年SCMP綜合恢復(fù)試題及答案
- 江蘇省鹽城市2024年中考數(shù)學(xué)試卷附真題解析
- 2025年和政府合作的項(xiàng)目合同模板
- CPSM考試體驗(yàn)分享試題與答案
- 國(guó)際物流行業(yè)的人才培養(yǎng)與試題及答案
- DB1301T526-2024蛋雞大箱體機(jī)械化孵化生產(chǎn)管理規(guī)范
- DB13T 5920-2024白洋淀水生態(tài)環(huán)境質(zhì)量綜合評(píng)價(jià)技術(shù)規(guī)范
- 2025年中國(guó)內(nèi)褲架市場(chǎng)調(diào)查研究報(bào)告
- 2025年度生物科技廠房退租協(xié)議
- 2025年中國(guó)兒童浴盆市場(chǎng)調(diào)查研究報(bào)告
- 2022年R1快開門式壓力容器操作考試題及R1快開門式壓力容器操作考試題庫(kù) -1
- GB/T 9728-1988化學(xué)試劑硫酸鹽測(cè)定通用方法
- GA 923-2011公安特警專用車輛外觀制式涂裝規(guī)范
- 第2章化學(xué)工藝基礎(chǔ)《化學(xué)工藝學(xué)(第二版)》米鎮(zhèn)濤課件
- 文物建筑保護(hù)工程施工組織設(shè)計(jì)編制要求
- 中寧縣牛羊交易市場(chǎng)建設(shè)項(xiàng)目可行性研究報(bào)告
- 東洋(TOYO)VF64C系列變頻器中文說(shuō)明書
- 山東祭宅文書900字(5篇)
- 湖南財(cái)政經(jīng)濟(jì)學(xué)院專升本英語(yǔ)真題及答案解析
- 內(nèi)部控制案例第02章案例6 獐子島
- 2022俄語(yǔ)課程標(biāo)準(zhǔn)解讀及學(xué)習(xí)心得:聚焦核心素養(yǎng)的俄語(yǔ)課程改革
評(píng)論
0/150
提交評(píng)論