




已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一階段Java核心及基礎(chǔ)應(yīng)用 Java面向?qū)ο笏枷爰昂诵?楊振宇2011 11 Java面向?qū)ο笏枷爰昂诵?一 接口 抽象類二 內(nèi)部類 匿名類和包三 字符串類四 異常處理五 JDK核心API和高級(jí)類六 圖形界面編程七 IO輸入輸出流八 多線程九 集合框架后續(xù) 網(wǎng)絡(luò)編程 JDBC 前期基礎(chǔ) Java基礎(chǔ) 面向?qū)ο缶幊?類和繼承 6 1 1類的定義 人 張三 李四 電話機(jī) 茶具 沙發(fā) 一 接口和抽象類 1 接口的概念2 接口的實(shí)現(xiàn)3 抽象類和抽象方法4 接口回調(diào)5 接口作參數(shù)6 類的多態(tài) Java語(yǔ)言中 一個(gè)子類只可以繼承一個(gè)直接父類 這被稱為單一繼承 使用單一繼承雖然各個(gè)類之間的層次關(guān)系清楚 可讀性強(qiáng) 但是在處理一些復(fù)雜問(wèn)題時(shí) 則會(huì)顯得功能不夠強(qiáng)大 因此 Java語(yǔ)言提供了接口功能 來(lái)實(shí)現(xiàn)多重繼承 接口是用來(lái)組織類內(nèi)容的一種程序結(jié)構(gòu) 一個(gè)類可以有多個(gè)接口 在Java語(yǔ)言中 一個(gè)對(duì)象的行為一般是與其具體的實(shí)現(xiàn)細(xì)節(jié)分開(kāi)的 這種對(duì)象行為與行為的具體實(shí)現(xiàn)細(xì)節(jié)分離的設(shè)計(jì)方法稱為抽象 1 接口的概念 在Java語(yǔ)言中 使用接口來(lái)定義某個(gè)類所支持的操作 因此 在接口中 所有的方法均為抽象方法 接口定義的僅僅是實(shí)現(xiàn)某一特定功能的接口和其規(guī)范 而并沒(méi)有真正實(shí)現(xiàn)這個(gè)功能 這個(gè)功能的真正實(shí)現(xiàn)是在應(yīng)用這個(gè)接口的類中完成的 要由類來(lái)具體定義接口中各個(gè)抽象方法的語(yǔ)句體 例如 如果我們定義了一個(gè)名為Calculate的接口 其中有add 和minus 兩個(gè)抽象方法 那么任何實(shí)現(xiàn)該接口的類都必須支持其中的add 和minus 方法 也就是說(shuō)在類中具體描述這兩個(gè)方法的語(yǔ)句體內(nèi)容 1 接口的概念 創(chuàng)建接口的形式如下 publicinterface接口名 publicstaticfinal類型變量名 常量數(shù)據(jù) publicabstract方法類型方法名 參數(shù) 其中 關(guān)鍵字interface是用來(lái)定義接口的 接口名要符合Java對(duì)標(biāo)識(shí)符的規(guī)定 public是接口的唯一訪問(wèn)控制修飾符 如果沒(méi)有使用任何訪問(wèn)控制修飾符 則表示只有與該接口定義在同一個(gè)包中的類才可以訪問(wèn)這個(gè)接口 接口中的變量只能是常量形式的變量 方法也必須是抽象方法 因?yàn)榻涌谥械姆椒ň鞘褂眯揎椃鹥ublic和關(guān)鍵字abstract修飾的 所以在書(shū)寫(xiě)時(shí)可以省略這兩個(gè)單詞 2 接口的實(shí)現(xiàn) 例如 在下面的接口程序中 我們定義了2個(gè)常量和3個(gè)抽象方法 interfaceCalculate inti 10 Strings 計(jì)算結(jié)果如下 booleanisZhishu intadd inta intb doubleminus inta intb 創(chuàng)建接口僅僅給出了抽象方法 如果要具體的實(shí)現(xiàn)接口所定義的方法 則需要某個(gè)類為接口中的每個(gè)抽象方法定義具體的操作來(lái)實(shí)現(xiàn)這個(gè)接口的功能 2 接口的實(shí)現(xiàn) 實(shí)現(xiàn)接口的形式為 publicclass類名implements接口名1 接口名2 語(yǔ)句體 其中 使用關(guān)鍵字implements來(lái)定義這個(gè)類的接口 一個(gè)類可以實(shí)現(xiàn)多個(gè)接口 使用逗號(hào)將它們分隔開(kāi) 注意三點(diǎn) 1 如果實(shí)現(xiàn)某個(gè)接口的類不是使用關(guān)鍵字abstract修飾的抽象類 則在類中必須定義實(shí)現(xiàn)接口所有抽象方法的具體實(shí)例方法 并且該方法必須與接口中的方法定義完全一致 也就是說(shuō)具有完全相同的參數(shù)個(gè)數(shù)和類型 以及方法的返回類型 2 接口的實(shí)現(xiàn) 2 如果實(shí)現(xiàn)某個(gè)接口的類是使用關(guān)鍵字abstract修飾的抽象類 則它可以不實(shí)現(xiàn)該接口所有的方法 但是在這個(gè)抽象類的任何一個(gè)非抽象子類中 必須具體定義其父類所實(shí)現(xiàn)的接口中的所有抽象方法 另外 可以定義一個(gè)新的接口 用extend關(guān)鍵字去繼承一個(gè)已有的接口 3 接口的抽象方法的訪問(wèn)控制符均為public 所以類在實(shí)現(xiàn)這些抽象方法時(shí) 必須使用public修飾符 例如 publicinterfaceNum intnum 10 publicvoidprintNum publicclassTestNumimplementsNum publicvoidprintNum System out println Num Num 2 接口的實(shí)現(xiàn) 抽象類的意義與接口基本一樣 都是為了更好的控制類的抽象結(jié)構(gòu) 定義抽象類的形式為 abstractclass類名 語(yǔ)句體 1 抽象類中的方法可以是實(shí)例方法 也可以抽象方法 但是如果一個(gè)類含有抽象方法 則此類必須為抽象類 而其如果一個(gè)類是抽象類的子類且其不是抽象類 則該子類必須實(shí)現(xiàn)父類的所有抽象方法 2 抽象方法定義了一個(gè)抽象類的功能 但是沒(méi)有給出該功能的具體實(shí)現(xiàn)過(guò)程 定義抽象方法的形式為 abstract方法類型方法名 參數(shù) 3 抽象方法不能使用修飾符static和final修飾 3 抽象類和抽象方法 接口與抽象類有相似之處 但也有區(qū)別 下表反映了兩者的區(qū)別 3 抽象類和抽象方法 案例接口的實(shí)現(xiàn)與運(yùn)用 目的 1 學(xué)習(xí)如何定義接口 2 掌握接口的實(shí)現(xiàn)方式 3 使用實(shí)現(xiàn)了接口的類 4 理解接口與抽象類的區(qū)別 任務(wù) 設(shè)計(jì)和實(shí)現(xiàn)一個(gè)Soundable接口 該接口具有發(fā)聲功能 同時(shí)還能夠調(diào)節(jié)聲音大小 Soundable接口的這些功能將會(huì)由3種聲音設(shè)備來(lái)具體實(shí)現(xiàn) 它們分別是收音機(jī)Radio 隨身聽(tīng)Walkman和手機(jī)Mobilephone 最后還要設(shè)計(jì)一個(gè)應(yīng)用程序類來(lái)使用這些實(shí)現(xiàn)了Soundable接口的聲音設(shè)備類 程序運(yùn)行時(shí) 先詢問(wèn)用戶想聽(tīng)哪種設(shè)備 然后程序就會(huì)按照該設(shè)備的工作方式來(lái)發(fā)出聲音 程序運(yùn)行的效果如圖所示 思考 1 請(qǐng)問(wèn)在InterfaceTest類中 SoundDevice 數(shù)組是什么類型的 該數(shù)組為什么能存放3種不同的對(duì)象Radio Walkman和Mobilephone呢 2 在程序中 Soundable是一個(gè)接口 那么該接口是否可以被實(shí)例化呢 請(qǐng)?jiān)贗nterfaceTest類的main 方法中加入以下語(yǔ)句試驗(yàn)一下 并分析結(jié)果 案例接口的實(shí)現(xiàn)與運(yùn)用 3 現(xiàn)在假定要為程序增加一個(gè)鬧鐘類Clock 該類也實(shí)現(xiàn)Soundable接口 能夠發(fā)出滴答聲 請(qǐng)將以下的Clock類加入到InterfaceTest java程序中 并在InterfaceTest類的main 方法中加入SoundDevice 3 newClock 語(yǔ)句 修改之后 重新編譯InterfaceTest java并運(yùn)行它 觀察結(jié)果 案例接口的實(shí)現(xiàn)與運(yùn)用 4 在第 3 小題中由于新加入的Clock類僅僅實(shí)現(xiàn)了Soundable接口的stopSound 和playSound 方法 而increaseVolume 和decreaseVolume 方法沒(méi)有實(shí)現(xiàn) 因此它實(shí)質(zhì)上是一個(gè)抽象類 而抽象類是不能實(shí)例化的 所以導(dǎo)致編譯錯(cuò)誤 但是按照常理 鬧鐘的滴答聲確實(shí)是不可以增大或減小的 那么如何解決這個(gè)問(wèn)題呢 現(xiàn)在請(qǐng)?jiān)贑lock類中加入下面兩個(gè)含 空方法體的方法實(shí)現(xiàn) 再編譯運(yùn)行程序 看看會(huì)有什么變化 案例接口的實(shí)現(xiàn)與運(yùn)用 5 現(xiàn)在請(qǐng)模仿本實(shí)驗(yàn)的程序設(shè)計(jì)出一個(gè)自己的接口程序 要求先設(shè)計(jì)一個(gè)moveable可移動(dòng)接口 然后分別設(shè)計(jì)3個(gè)類 即汽車(chē)Car 輪船Ship 飛機(jī)Aircraft來(lái)實(shí)現(xiàn)該接口 最后設(shè)計(jì)一個(gè)應(yīng)用程序來(lái)使用它們 4 接口回調(diào) 接口回調(diào)是指 可以把實(shí)現(xiàn)某一接口的類創(chuàng)建的對(duì)象的引用賦給該接口聲明的接口變量中 那么該接口變量就可以調(diào)用被類實(shí)現(xiàn)的接口中的方法 實(shí)際上 當(dāng)接口變量調(diào)用被類實(shí)現(xiàn)的接口中的方法時(shí) 就是通知相應(yīng)的對(duì)象調(diào)用接口的方法 實(shí)例運(yùn)行 5 接口作參數(shù) 一個(gè)方法的參數(shù)是接口類型 就可以將任何實(shí)現(xiàn)該接口的類的實(shí)例的引用傳遞給該接口參數(shù) 接口參數(shù)就可以回調(diào)類實(shí)現(xiàn)的接口方法 實(shí)例運(yùn)行 6 類的多態(tài) 1 多態(tài)的概念2 動(dòng)態(tài)綁定 多態(tài)是指程序的多種表現(xiàn)形式 除了方法的重載 子類對(duì)父類方法的覆蓋或者子類對(duì)抽象父類中的抽象方法的具體定義也是類多態(tài)的一種表現(xiàn)形式 所謂覆蓋 是在定義子類的方法時(shí) 使用與其父類中相同的名稱和參數(shù) 在執(zhí)行程序時(shí) 將執(zhí)行子類的方法 而覆蓋父類的方法 1 多態(tài)的概念 例如 publicdoublesum doublea doubleb returna b 在子類中有方法名和參數(shù)都完全相同 但是語(yǔ)句體內(nèi)容不同的方法publicdoublesum doublea doubleb returna b 當(dāng)編寫(xiě)應(yīng)用程序 通過(guò)子類對(duì)象調(diào)用sum 方法時(shí) 只會(huì)執(zhí)行子類中求積的方法 而不會(huì)執(zhí)行父類中求和的方法 1 多態(tài)的概念 利用多態(tài)性 可以將一個(gè)方法的形參設(shè)為超類類型 而將傳遞給該方法的實(shí)參既可以是超類對(duì)象也可以是子類對(duì)象 具體執(zhí)行時(shí) Java會(huì)自動(dòng)根據(jù)實(shí)際對(duì)象所屬的類型來(lái)選擇方法執(zhí)行 因此多態(tài)性增強(qiáng)了編程的靈活性和系統(tǒng)的維護(hù)性和可擴(kuò)展性 1 多態(tài)的概念 2 動(dòng)態(tài)綁定 在Java中超類往往定義出一個(gè)通用的方法 而其不同的實(shí)現(xiàn)則由它的不同的子類來(lái)完成 當(dāng)通過(guò)對(duì)象來(lái)調(diào)用這樣一個(gè)方法時(shí) Java會(huì)依據(jù)運(yùn)行時(shí)該對(duì)象的實(shí)際類型來(lái)決定用方法的哪一個(gè)版本來(lái)執(zhí)行 也即動(dòng)態(tài)地綁定一個(gè)方法來(lái)執(zhí)行 動(dòng)態(tài)綁定的前提是 Java允許將子類對(duì)象賦給超類類型的變量 每個(gè)子類對(duì)象同時(shí)也是其超類的對(duì)象 案例多態(tài)性與動(dòng)態(tài)綁定 目的 1 掌握多態(tài)性在繼承中的運(yùn)用 2 理解動(dòng)態(tài)綁定的含義 3 學(xué)會(huì)使用抽象類 4 了解成員變量的隱藏 任務(wù) 請(qǐng)?jiān)O(shè)計(jì)3個(gè)類 分別是學(xué)生類Student 本科生類Undergraduate 研究生類Postgraduate 其中Student類是一個(gè)抽象類 它包含一些基本的學(xué)生信息如姓名 所學(xué)課程 課程成績(jī)等 而Undergraduate類和Postgraduate都是Student類的子類 它們之間的主要差別是計(jì)算課程成績(jī)等級(jí)的方法有所不同 研究生的標(biāo)準(zhǔn)要比本科生的標(biāo)準(zhǔn)高一些 如下表所示 假設(shè)某班級(jí)里既有本科生也有研究生 請(qǐng)編寫(xiě)程序統(tǒng)計(jì)出全班學(xué)生的成績(jī)等級(jí)并顯示出來(lái) 此題關(guān)鍵是設(shè)計(jì)一個(gè)學(xué)生數(shù)組 既能存放本科生對(duì)象 又能存放研究生對(duì)象 程序的運(yùn)行效果如圖所示 案例多態(tài)性與動(dòng)態(tài)綁定 思考 1 在Polymorphism類中有一個(gè)循環(huán)語(yǔ)句用來(lái)計(jì)算每個(gè)學(xué)生的成績(jī)等級(jí)for inti 0 I 5 i students i calculateGrade 請(qǐng)問(wèn)這里的calculateGrade 方法是按照研究生的標(biāo)準(zhǔn)還是按照本科生的標(biāo)準(zhǔn)來(lái)計(jì)算的 2 請(qǐng)問(wèn)在程序Polymorphism類中 哪些語(yǔ)句體現(xiàn)了子類的對(duì)象可以賦值給父類的引用變量 案例多態(tài)性與動(dòng)態(tài)綁定 3 現(xiàn)在請(qǐng)?jiān)诔绦騊olymorphisrn類的main 方法中添加如下的語(yǔ)句Studentst newStudent 李明 此時(shí)編譯是否會(huì)報(bào)錯(cuò) 如有錯(cuò)誤 請(qǐng)解釋原因 4 在程序中要判斷student i 中存放的究竟是Undergraduate對(duì)象還是Postgraduate對(duì)象 只需要調(diào)用student i getType 方法即可 然而Java提供了一個(gè)instanceof運(yùn)算也可以完成這一任務(wù) 它能判斷出一個(gè)對(duì)象所屬的類 請(qǐng)將以下代碼添加到程序中進(jìn)行測(cè)試 案例多態(tài)性與動(dòng)態(tài)綁定 5 現(xiàn)在請(qǐng)模仿本程序 新增一個(gè)高中生類 它計(jì)算成績(jī)等級(jí)的標(biāo)準(zhǔn)采用如下方法 然后在主程序中測(cè)試并使用它 案例多態(tài)性與動(dòng)態(tài)綁定 使用接口要點(diǎn)如果一個(gè)類使用了某個(gè)接口 那么這個(gè)類必須實(shí)該接口的所有方法 即為這些方法提供方法體 在類中實(shí)現(xiàn)接口的方法時(shí) 方法的名字 返回類參數(shù)個(gè)數(shù)及類型必須與接口中的完全一致 接口中的方法被默認(rèn)是public的 所以類在實(shí)現(xiàn)口方法時(shí) 一定要用public來(lái)修飾 如果接口方法名有返回類型 那么在類中實(shí)現(xiàn)該口方法時(shí) 方法體至少要有一個(gè)return語(yǔ)句 如果接口方
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 棉麻與其他天然纖維的復(fù)合創(chuàng)新
- 流動(dòng)科技館科普服務(wù)規(guī)范編制說(shuō)明
- 海洋產(chǎn)業(yè)集群空間布局
- 2025年四川大道致遠(yuǎn)供應(yīng)鏈管理公司市場(chǎng)管理招聘考試筆試試題(含答案)
- 2025年寧波侖大碶街道招聘考試筆試試題(含答案)
- 鏟車(chē)操作人員安全教育與培訓(xùn)合同
- 餐飲場(chǎng)地租賃及品牌形象設(shè)計(jì)合作協(xié)議
- 老人養(yǎng)老護(hù)理培訓(xùn)課件
- 大學(xué)黨務(wù)面試題庫(kù)及答案
- 大理體彩考試題及答案
- 《水上客運(yùn)重大事故隱患判定指南(暫行)》知識(shí)培訓(xùn)
- 酒庫(kù)管理安全知識(shí)
- 貸款申請(qǐng)資料清單表
- 2024年1月國(guó)家開(kāi)放大學(xué)漢語(yǔ)言文學(xué)本科《古代詩(shī)歌散文專題》期末紙質(zhì)考試試題及答案
- 弱電工程項(xiàng)目經(jīng)理職責(zé)
- DB3301T 0410-2023 城市河道生態(tài)清淤管理規(guī)范
- 9.1 浮力(課件)2024-2025學(xué)年滬粵版物理八年級(jí)下冊(cè)
- 雙碳知識(shí)培訓(xùn)
- 金融科技風(fēng)險(xiǎn)管理
- 大部分分校:地域文化形考任務(wù)一-國(guó)開(kāi)(CQ)-國(guó)開(kāi)期末復(fù)習(xí)資料
- 2025版國(guó)家開(kāi)放大學(xué)法律事務(wù)??啤睹穹▽W(xué)(1)》期末考試總題庫(kù)
評(píng)論
0/150
提交評(píng)論