java核心技術(shù)接口與內(nèi)部類_第1頁
java核心技術(shù)接口與內(nèi)部類_第2頁
java核心技術(shù)接口與內(nèi)部類_第3頁
java核心技術(shù)接口與內(nèi)部類_第4頁
java核心技術(shù)接口與內(nèi)部類_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六章接口與內(nèi)部類

/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第1頁本章導讀:6.1接口6.2對象與克隆6.3接口與回調(diào)6.4內(nèi)部類6.5代理重難點:接口、對象與克隆、接口與回調(diào)、內(nèi)部類/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第2頁接口定義:接口是一個與類相同結(jié)構(gòu),但接口不是類,而是一組對類要求,這些類要與接口一致一個類能夠?qū)崿F(xiàn)一個或多個接口,并在需要接口地方,隨時使用實現(xiàn)了對應接口對象接口使用*/將類申明為給定接口*/ClassEmployeeimplementsComparable<Employee>{/*對接口中方法進行定義*/Publicintcomparator(Employeeother){If(salary<other.salary)return-1;If(salary>other.salary)return1;Return0;}····}

/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第3頁類特征:接口不是類,不能用new運算符實例化一個接口:eg:x=newComparable(···);//錯誤能夠申明接口變量,接口變量必須引用實現(xiàn)了接口類對象eg:Comparablex;//正確可使用instance檢驗一個對象是否實現(xiàn)了某特定接口與能夠建立類繼承關(guān)系一樣,接口也能夠被擴展接口中不能包含實例域或靜態(tài)方法,但卻能夠包含常量每個類只能有一個超類,但能夠?qū)崿F(xiàn)多個接口eg:classEmployeeimplementsCloneable,Comparable/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第4頁接口和抽象類比較:接口:方法都是抽象一個類可是同時實現(xiàn)多個接口Java語言利用接口機制來實現(xiàn)C++中多繼承大部分功效接口能繼承多個接口但不能實現(xiàn)另一個接口類假如實現(xiàn)了一個接口,那么必須實現(xiàn)接口里面全部抽象方法,不然類要被定義為抽象類接口只能定義靜態(tài)常量接口不包含結(jié)構(gòu)方法抽象類:能夠含有非抽象方法一個類自能派生自一個抽象類假如將一個類申明為abstract,這類不能生成對象,只能被繼承使用子類繼承抽象類必須實現(xiàn)其中抽象方法,除非子類為抽象類抽象類能夠定義普通常量抽象類能夠有結(jié)構(gòu)方法以被繼承類擴充/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第5頁對象克隆:拷貝原始變量和拷貝變量引用同一個對象克隆變量初始態(tài)與原始變量相同,但以后能夠各自改變/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第6頁淺拷貝是指對象中基本數(shù)據(jù)類型得到拷貝,而引用數(shù)據(jù)類型并未拷貝深拷貝是指實現(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頁默認克隆操作是淺拷貝對于每個類需要以下判斷:1)默認clone方法能否滿足要求2)默認clone方法是否能夠經(jīng)過調(diào)用可變子對象clone得到修補3)是否不應該使用clone實現(xiàn)深拷貝,類必須:1)實現(xiàn)Cloneable接口2)使用public訪問修飾符重新定義clone方法/11/1Friday/*實現(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)模式是一個常見編程模式,如C/C++中回調(diào)函數(shù)經(jīng)過將回調(diào)函數(shù)地址傳給調(diào)用者從而實現(xiàn)調(diào)用回調(diào)技術(shù)一個經(jī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)部類是定義在另一個類中類使用內(nèi)部類主要原因:內(nèi)部類方法能夠訪問該類定義所在作用域中數(shù)據(jù),包含私有數(shù)據(jù)數(shù)據(jù)內(nèi)部類能夠被同一個包中其它類隱藏起來當想要定義一個回調(diào)函數(shù)且不想編寫大量代碼,使用匿名內(nèi)部類比較便捷申明在接口中內(nèi)部類自動成為static和public類型。/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第10頁publicclassTalkingClock{publicTalkingClock(intinterval,Booleanbeep){···}

publicvoidstart(){···}privateintintereval;

privateintbooleanbeep;/*定義一個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--表示了外部類一個引用。 如: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是個公有類,那么在程序其它地方使用BankAccount.InterestAddr來引用它。/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第12頁局部內(nèi)部類定義在外部類方法中類;1)局部內(nèi)部類不使用訪問指示符,它們范圍總是限定在他們程序塊中;2)局部內(nèi)部類含有最大隱藏性;3)局部內(nèi)部類能夠訪問外部類所在方法中局部變量,但局部變量必須申明為final類型。4)局部類方法只能使用那些申明為final局部變量,因為申明為final變量后,變量就不可能隨便進行修改,這么,局部變量和局部類所建立變量拷貝總是含有相同值/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第13頁匿名內(nèi)部類:只創(chuàng)建這個類一個對象,就無須為它命名了,這種類被稱為匿名內(nèi)部類。匿名內(nèi)部類語法:

newSuperType(constrcutionparameters){

內(nèi)部類方法和數(shù)據(jù);

} newinterfacename(constrcutionparameters){ 內(nèi)部類方法和數(shù)據(jù);

}匿名內(nèi)部類主要用在方便地定義運行時回調(diào),以及編寫事件驅(qū)動方面。因為結(jié)構(gòu)器名字必須和類名相同,而匿名類沒有類名,所以匿名類不能有結(jié)構(gòu)器。/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第14頁靜態(tài)內(nèi)部類:假如只想內(nèi)部類隱藏在另一個類中,而不需要內(nèi)部類含有對外部類對象引用,這種情況下,就能夠?qū)?nèi)部類申明為static類型,形成靜態(tài)內(nèi)部類。靜態(tài)內(nèi)部類假如在一個方法中結(jié)構(gòu),這個方法必須是靜態(tài)方法。靜態(tài)內(nèi)部類對象除了沒有對生成它外圍類對象引用特權(quán)外,與其它內(nèi)部類完全一樣。/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第15頁代理:要創(chuàng)建一個代理對象,需用Proxy類newProxyInstance方法。方法中三個參數(shù):1)一個類加載器。不一樣類能夠使用不一樣類加載器2)一個class對象數(shù)組,每個元素都是要實現(xiàn)接口;3)一個調(diào)用處理器。使用代理原因:路由對遠程服務器方法調(diào)用在程序運行期間,將用戶接口事件與動作關(guān)聯(lián)起來為調(diào)試,跟蹤方法調(diào)用/11/1Fridayjava核心技術(shù)接口與內(nèi)部類第16頁代理類特征:代理類是在程序運行過程中創(chuàng)建,一旦創(chuàng)建就與常規(guī)類沒有區(qū)分。代理(Proxy)類只有一個實例域,即調(diào)用處理器,代理類需要額外數(shù)據(jù)都必須存放在調(diào)用處理器中對于特定類加載器和接口來說,只能有一個代理類。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論