版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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頁本章導(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頁接口定義:接口是一個(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頁類特征:接口不是類,不能用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頁接口和抽象類比較:接口:方法都是抽象一個(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,這類不能生成對(duì)象,只能被繼承使用子類繼承抽象類必須實(shí)現(xiàn)其中抽象方法,除非子類為抽象類抽象類能夠定義普通常量抽象類能夠有結(jié)構(gòu)方法以被繼承類擴(kuò)充/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第5頁對(duì)象克?。嚎截愒甲兞亢涂截愖兞恳猛粋€(gè)對(duì)象克隆變量初始態(tài)與原始變量相同,但以后能夠各自改變/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第6頁淺拷貝是指對(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頁默認(rèn)克隆操作是淺拷貝對(duì)于每個(gè)類需要以下判斷:1)默認(rèn)clone方法能否滿足要求2)默認(rèn)clone方法是否能夠經(jīng)過調(diào)用可變子對(duì)象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();//接口變量中存放對(duì)象引用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)部類對(duì)于外部引用正確語法是:
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)器能夠顯式表示,語法以下:
ActionListeneraddr=this.new.InterestAddr(constructionparameters); Notes:若內(nèi)部類InterestAddr是個(gè)公有類,那么在程序其它地方使用BankAccount.InterestAddr來引用它。/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第12頁局部?jī)?nèi)部類定義在外部類方法中類;1)局部?jī)?nèi)部類不使用訪問指示符,它們范圍總是限定在他們程序塊中;2)局部?jī)?nèi)部類含有最大隱藏性;3)局部?jī)?nèi)部類能夠訪問外部類所在方法中局部變量,但局部變量必須申明為final類型。4)局部類方法只能使用那些申明為final局部變量,因?yàn)樯昝鳛閒inal變量后,變量就不可能隨便進(jìn)行修改,這么,局部變量和局部類所建立變量拷貝總是含有相同值/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第13頁匿名內(nèi)部類:只創(chuàng)建這個(gè)類一個(gè)對(duì)象,就無須為它命名了,這種類被稱為匿名內(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)部類含有對(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頁代理:要?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)起來為調(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)用處理器中對(duì)于特定類加載器和接口來說,只能有一個(gè)代理類。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電商企業(yè)產(chǎn)品描述翻譯協(xié)議
- 市場(chǎng)調(diào)查公司租賃合同
- 保險(xiǎn)公司水磨石地面安裝合同
- 儀器租用合同:舞臺(tái)特效設(shè)備
- 城市供氣工程土建施工合同范本
- 水產(chǎn)養(yǎng)殖水產(chǎn)品存儲(chǔ)與配送制度
- 苗木種植項(xiàng)目合作合同
- 康復(fù)醫(yī)院醫(yī)生聘用合同樣本
- 野生動(dòng)物園山坡租賃合同
- 醫(yī)院捐贈(zèng)物資使用規(guī)范
- 延安整風(fēng)與馬克思主義中國(guó)化
- 我國(guó)陸軍專業(yè)知識(shí)講座
- 煤礦機(jī)電運(yùn)輸安全培訓(xùn)課件
- 貨車安全隱患排查表
- 學(xué)前教育職業(yè)規(guī)劃書
- 教師專業(yè)成長(zhǎng)概述教師專業(yè)發(fā)展途徑PPT培訓(xùn)課件
- 球磨機(jī)安裝專項(xiàng)施工方案
- 2023年山東省港口集團(tuán)有限公司招聘筆試題庫及答案解析
- GB/T 25217.10-2019沖擊地壓測(cè)定、監(jiān)測(cè)與防治方法第10部分:煤層鉆孔卸壓防治方法
- GB/T 20284-2006建筑材料或制品的單體燃燒試驗(yàn)
- GB/T 15604-2008粉塵防爆術(shù)語
評(píng)論
0/150
提交評(píng)論