版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1Java核心技術(shù)(上)醫(yī)藥信息工程學(xué)院陳偉廣東藥學(xué)院2接口與內(nèi)部類廣東藥學(xué)院接口interface是一個(gè)完成某些特定功能的類。接口用來描述類具有什么功能,而不給出功能的具體實(shí)現(xiàn)。一個(gè)類可以實(shí)現(xiàn)一個(gè)或多個(gè)接口publicinterfaceComparable{ intcompareTo(Objectother);}classEmployeeimplementsComparable{publicintcompareTo(Objectother){..... }}接口中的所有方法都自動(dòng)地屬于public.在實(shí)現(xiàn)類中必須把方法聲明為public。接口不能聲明為final。接口體中包含常量定義和方法定義兩部分。接口只聲明方法,方法由實(shí)現(xiàn)類完成實(shí)現(xiàn),如果不定義方法,則該類是抽象類,加abstract關(guān)鍵字。classabstractEmployeeimplementsComparable{/*publicintcompareTo(Objectother){..... }*/}類實(shí)現(xiàn)一個(gè)接口需要1)將類聲明為實(shí)現(xiàn)給定的接口2)對(duì)接口中的所有方法進(jìn)行定義。示例接口的特性接口不是類,不能進(jìn)行new。Comparablex=newComparable();//error,不能創(chuàng)建接口對(duì)象;可以聲明接口變量,該變量可以指向一個(gè)實(shí)現(xiàn)了接口的類的對(duì)象Comparablex;x=newEmployee(...);//Employee類實(shí)現(xiàn)了Comparable接口可以使用instanceof操作符判斷對(duì)象是否實(shí)現(xiàn)了某個(gè)接口if(anObjectinstanceofComparable){...}接口也可以被擴(kuò)展(繼承)。publicinterfaceMoveable{ voidmove(doublex,doubley);}publicinterfacePoweredextendsMoveable{ doublemilesPerGallon();}接口不能含有實(shí)例屬性和靜態(tài)方法,但可以包含常量(自動(dòng)設(shè)為publicstaticfinal);publicinterfacePoweredextendsMoveable{doublemilesPerGallon();//方法自動(dòng)設(shè)置為publicdoubleSPEED_LIMIT=120;//自動(dòng)設(shè)為publicstaticfinal}一個(gè)類只能有一個(gè)超類,但可以實(shí)現(xiàn)多個(gè)接口(C++多繼承)classEmployeeimplementsCloneable,Comparable{........}多接口用逗號(hào)分開接口與抽象類classEmployeeextendsPerson,Comparable//ERRORclassEmployeeextendsPersonimplementsComparable//OK接口主要為了使用多重繼承,同時(shí)降低多繼承的復(fù)雜性和提高效率。疑問:接口中能有構(gòu)造方法嗎?接口能繼承(extends)另一個(gè)接口,能不能實(shí)現(xiàn)(implement)另一個(gè)或多個(gè)接口呢?接口與抽象類的區(qū)別1.接口是抽象類的變體,接口中所有的方法都是抽象的。而抽象類是聲明方法的存在而不去實(shí)現(xiàn)它的類。2.接口可以多繼承,抽象類不行3.接口定義方法,不能實(shí)現(xiàn),而抽象類可以實(shí)現(xiàn)部分方法。4.接口中基本數(shù)據(jù)類型為static,而抽類象不是的。5.接口不能有構(gòu)造方法,抽象類可以有。6.接口不能有靜態(tài)方法,抽象類可以有。7.在接口中凡是變量必須是publicstaticfinal,而在抽象類中沒有要求。當(dāng)你關(guān)注一個(gè)事物的本質(zhì)的時(shí)候,用抽象類;當(dāng)你關(guān)注一個(gè)操作的時(shí)候,用接口。對(duì)象克隆Employeeoriginal=newEmployee("johnPublic",50000);Employeecopy=original;copy.raiseSalary(10);//同時(shí)改了original對(duì)象Employeecopy=original.clone();copy.raiseSalary(10);//不改了original對(duì)象clone方法是Object類中的protected方法。對(duì)象克隆淺拷貝:當(dāng)拷貝一個(gè)變量的時(shí)候,原始變量與拷貝變量引用同一個(gè)對(duì)象,這是一種淺拷貝,拷貝出來的對(duì)象仍然會(huì)對(duì)原對(duì)象產(chǎn)生影響。深拷貝:對(duì)象克隆,又稱為深拷貝。指的是創(chuàng)建一個(gè)新對(duì)象,且新對(duì)象的狀態(tài)與原始對(duì)象的狀態(tài)相同,當(dāng)克隆的新對(duì)象修改時(shí),不會(huì)影響原來的對(duì)象的狀態(tài)。publicEmployeeclone()throwsCloneNotSupportedException{//callObject.clone()Employeecloned=(Employee)super.clone();//clonemutablefieldscloned.hireDay=(Date)hireDay.clone();returncloned;}只有一個(gè)類實(shí)現(xiàn)了Cloneable接口才可以調(diào)用clone方法克隆。如果沒有實(shí)現(xiàn)Cloneable接口,則會(huì)產(chǎn)生一個(gè)已檢驗(yàn)異常(checkedexception)示例clonev1ch06.clone謹(jǐn)慎地實(shí)現(xiàn)子類的克隆。接口與回調(diào)回調(diào)(callback)是一種常見的程序設(shè)計(jì)模式。指出某個(gè)特定事件發(fā)生時(shí)應(yīng)該采取的動(dòng)作。典型應(yīng)用就是事件處理。示例TimerTest.javaclassTimePrinterimplementsActionListener{publicvoidactionPerformed(ActionEventevent){Datenow=newDate();System.out.println("Atthetone,thetimeis"+now);Toolkit.getDefaultToolkit().beep();}}javax.swing.JOptionPane類staticvoidshowMessageDialog(Componentparent,Objectmessage)顯示一個(gè)包含一條消息和一個(gè)OK按鈕的對(duì)話框。這個(gè)對(duì)話框位于其parent組件的中央。如果parent為null,對(duì)話框?qū)@示在屏幕的中央。javax.swing.Timer類Timer(intinterval,ActionListenerlistener)構(gòu)造一個(gè)定時(shí)器,每隔interval毫秒鐘通知listener一次voidstart()啟動(dòng)定時(shí)器,一旦啟動(dòng)成功,定時(shí)器將調(diào)用監(jiān)聽器的actionPerformedvoidstop()停止定時(shí)器。一旦停止成功,定時(shí)不再調(diào)用監(jiān)聽器的actionPerformedjava.awt.Toolkit類staticToolkitgetDefaultToolkit()獲得默認(rèn)的工具箱,工具箱包含有關(guān)GUI環(huán)境的變量。voidbeep()發(fā)出一聲鈴響內(nèi)部類內(nèi)部類,innerclass,是定義在另一個(gè)類中的類。內(nèi)部類是一種編譯器現(xiàn)象,與虛擬機(jī)無關(guān),編譯器將會(huì)把內(nèi)部類翻譯成用$分隔外部類名與內(nèi)部類名的常規(guī)類文件,而虛擬機(jī)對(duì)此一無所知。內(nèi)部類比常規(guī)類更加強(qiáng)大,最大的特點(diǎn)是內(nèi)部類可以訪問外部類的私有數(shù)據(jù)。非內(nèi)部類的修飾符為public,abstract&final,而內(nèi)部類可以有private修飾。內(nèi)部類有三點(diǎn)原因被需要:內(nèi)部類可以訪問該類定義所在的作用域中的數(shù)據(jù),包括private類型的。內(nèi)部類可以對(duì)同一個(gè)包中的其他類隱藏起來。當(dāng)想要定義一個(gè)回調(diào)函數(shù)且不想編寫大量代碼的時(shí)候,使用匿名內(nèi)部類比較便捷。使用訪問類訪問對(duì)象狀態(tài)publicclassTalkingClock{privteintinterval;privatebooleanbeep;publicTalkingClock(intinterval,booleanbeep){...}publicvoidstart(){...}publicclassTimePrinterimplementsActionListener{ publicvoidactionPerformed(ActionEventevent){ Datenow=newDate(); System.out.println("Atthetone,thetimeis"+now); if(beep)Toolkit.getDefaultToolkit().beep(); }}隱式引用指向外部類outer=TimePrinterinterval=1000TalkingClockbeep=true局部內(nèi)部類publicvoidstart(){classTimePrinterimplementsActionListener{ publicvoidactionPerformed(ActionEventevent){ Datenow=newDate(); System.out.println("Atthetone,thetimeis"+now); if(beep)Toolkit.getDefaultToolkit().beep(); } }ActionListenerlistener=newTimePrinter();Timert=newTimer(interval,listener);t.start();}這個(gè)例子是在一個(gè)方法中定義局部類。局部類不能用public或private訪問說明符進(jìn)行聲明。它的作用域被限定在聲明這個(gè)局部類的塊中。對(duì)外部世界完全隱藏起來。只能在start方法中使用,別的方法都不能夠使用。由外部方法訪問final變量局部類能夠訪問包含它們的外部類,還可以訪問局部變量。不過那些局部變量必須被聲明為final。publicvoidstart(intinterval,finalbooleanbeep){
classTimePrinterimplementsActionListener{
publicvoidactionPerformed(ActionEventevent){
Datenow=newDate(); System.out.println("Atthetone,thetimeis"+now); if(beep)Toolkit.getDefaultToolkit().beep(); } }ActionListenerlistener=newTimePrinter();Timert=newTimer(interval,listener);t.start();}匿名內(nèi)部類匿名內(nèi)部類(anonymousinnerclass)假如只創(chuàng)建了這個(gè)類的一個(gè)對(duì)象,就不必命名了。這種類被稱為匿名類。由于匿名內(nèi)部類沒有名字,而構(gòu)造器的名字必須和類名一致,所以匿名內(nèi)部類沒有構(gòu)造器。因?yàn)闆]有構(gòu)造函數(shù),所以它必須完全借用父類的構(gòu)造函數(shù)來實(shí)例化,換言之:匿名內(nèi)部類完全把創(chuàng)建對(duì)象的任務(wù)交給了父類去完成。匿名內(nèi)部類是要擴(kuò)展或?qū)崿F(xiàn)父類或接口,所以只能是繼承一個(gè)類,重寫方法實(shí)現(xiàn)一個(gè)接口classTalkingClock{/***Startstheclock.*@paramintervaltheintervalbetweenmessages(inmilliseconds)*@parambeeptrueiftheclockshouldbeep*/publicvoidstart(intinterval,finalbooleanbeep){
ActionListenerlistener=newActionListener(){publicvoidactionPerformed(ActionEventevent){Datenow=newDate();System.out.println("Atthetone,thetimeis"+now);if(beep)Toolkit.getDefaultToolkit().beep();}};Timert=newTimer(interval,listener);t.start();}}使用匿名內(nèi)部類例子abstractclassPerson{publicabstractvoideat();}classChildextendsPerson{publicvoideat(){System.out.println("eatsomething");}}publicclassDemo{publicstaticvoidmain(String[]args){Personp=newChild();p.eat();}}abstractclassPerson{publicabstractvoideat();}publicclassDemo{publicstaticvoidmain(String[]args){
Personp=newPerson(){publicvoideat(){System.out.println("eatsomething");}};p.eat();}}直接用繼承在接口上使用匿名內(nèi)部類interfaceP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 警字特色課程設(shè)計(jì)
- 委托代銷服裝合同范例
- 施工電梯購買合同范例
- 鄉(xiāng)鎮(zhèn)糧油代理合同范例
- 外賣電動(dòng)車電池租賃協(xié)議3篇
- 全新美容院客人轉(zhuǎn)讓協(xié)議書范本3篇
- 養(yǎng)殖場拆除補(bǔ)償協(xié)議3篇
- 勞動(dòng)合同招工員工關(guān)系管理策略3篇
- 創(chuàng)意產(chǎn)業(yè)園區(qū)物業(yè)管理協(xié)議3篇
- 企業(yè)整體資產(chǎn)轉(zhuǎn)讓協(xié)議3篇
- 身臨其境 課件-2024-2025學(xué)年人教版(2024)初中美術(shù)七年級(jí)上冊
- 2024秋期國家開放大學(xué)專科《社會(huì)調(diào)查研究與方法》一平臺(tái)在線形考(形成性考核一至四)試題及答案
- 高中數(shù)學(xué)單元教學(xué)設(shè)計(jì)范文(5篇)
- 【人教版】《勞動(dòng)教育》五上 勞動(dòng)項(xiàng)目五《設(shè)計(jì)制作海報(bào)》課件
- GB/T 22517.2-2024體育場地使用要求及檢驗(yàn)方法第2部分:游泳場地
- 2024-2030年生命科學(xué)中的工業(yè)自動(dòng)化行業(yè)市場現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2024年江蘇蘇州市事業(yè)單位專業(yè)化青年人才定崗特選444人歷年高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- Unit3 Amazing Animals(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教PEP(2024)三年級(jí)上冊
- 一年級(jí)心理健康課件生命真美好蘇科版
- 10以內(nèi)連加減口算練習(xí)題完整版89
- GB/T 44460-2024消費(fèi)品質(zhì)量分級(jí)導(dǎo)則衛(wèi)生潔具
評(píng)論
0/150
提交評(píng)論