Java程序設(shè)計教程課件_第1頁
Java程序設(shè)計教程課件_第2頁
Java程序設(shè)計教程課件_第3頁
Java程序設(shè)計教程課件_第4頁
Java程序設(shè)計教程課件_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

人民郵電出版社6繼承與多態(tài)Java程序設(shè)計第章C目錄ONTENTS6.2域的隱藏和方法的重寫6.3對象的賦值兼容規(guī)則6.7泛型6.1子類及其對象6.4final關(guān)鍵字6.5多態(tài)6.6abstract關(guān)鍵字6.8小結(jié)6.1.1子類定義子類定義實際上就是定義類的過程,只不過是在父類的基礎(chǔ)上定義。子類定義形式:Java語言只支持單重繼承。除了Object類之外每個類都有一個父類,它是所有類的直接父類或間接父類。如果在定義一個類時沒有說明該繼承自哪一個類,則該類的父類是Object。class子類名extends父類名{//子類類體//……}01OPTION02OPTION03OPTION04OPTION6.1.2子類的可訪問性父類的私有成員可以被子類繼承,但只能通過繼承自父類的并且子類可以訪問的方法間接訪問。父類與子類不在同一個包中,則父類中的保護(hù)成員可以被子類中的方法直接訪問,但在子類類體外不可以通過子類對象訪問。類中的公有成員可以被子類中的方法直接訪問,在子類類體外可以通過子類對象訪問。父類與子類在同一個包中,則父類中的保護(hù)成員可以被子類中的方法直接訪問,在子類類體外可以通過子類對象訪問。01OPTION02OPTION6.1.2子類的可訪問性父類與子類在同一個包中,則父類中的友好成員可以被子類中的方法直接訪問,在子類類體外可以通過子類對象訪問。

父類與子類不在同一個包中,則父類中的友好成員不可以被子類中的方法直接訪問,在子類類體外不可以通過子類對象訪問,只能通過繼承自父類的并且子類可以訪問的方法間接訪問。【例6.1】設(shè)計一個圓類,該類能夠表示圓的位置和大小,能夠計算圓的面積和周長,能夠?qū)A進(jìn)行平移。定義圓類的對象并進(jìn)行相應(yīng)的操作,輸出操作后的結(jié)果。Example6_01.java6.1.3instanceof運算符

instanceof運算符用于判斷一個對象是否是某一個類的實例對象,或者是否是某一個類的子類的實例對象。instanceof的方法形式:對象名instanceof類名【例6.2】instanceof的用法。Example6_02.javaC目錄ONTENTS6.2域的隱藏和方法的重寫6.3對象的賦值兼容規(guī)則6.7泛型6.1子類及其對象6.4final關(guān)鍵字6.5多態(tài)6.6abstract關(guān)鍵字6.8小結(jié)6.2.1域的隱藏子類根據(jù)需要可以將繼承自父類的域進(jìn)行隱藏?!纠?.3】域隱藏舉例。Example6_03.java子類中定義的域的名字與繼承自父類的域的名字相同,則在子類中隱藏了繼承自父類的域,子類中的方法不能訪問父類中的被隱藏的域。6.2.2方法的重寫當(dāng)子類繼承父類的方法后,子類根據(jù)自身的需要可以對繼承的方法重新定義,以便使子類對象表現(xiàn)出與父類不同的行為。這種重新定義的過程稱方法的重寫(Override)?!纠?.4】某公司給雇員發(fā)工資。雇員中有經(jīng)理、技術(shù)人員和一般雇員,該公司給雇員定的工資標(biāo)準(zhǔn)是:一般雇員工資領(lǐng)固定工資,經(jīng)理工資在一般雇員工資基礎(chǔ)上加本月津貼,技術(shù)人員的工資在一般雇員工資基礎(chǔ)上加技術(shù)津貼,技術(shù)津貼為工作小時數(shù)×單位津貼/小時。Example6_04.java6.2.3super關(guān)鍵字super表示當(dāng)前類的直接父類。在有些情況下,還想訪問被子類隱藏的域或被重寫的方法,這種情況下則可以通過關(guān)鍵字super實現(xiàn)相應(yīng)的訪問。如果想明確地訪問繼承自父類中的域,可以通過下面形式訪問:super.域名表示訪問當(dāng)前類直接父類中的域。如果想明確地調(diào)用繼承自父類中的方法,可以通過下面形式訪問:super.方法名([實際參數(shù)])super還可以用于調(diào)用直接父類的構(gòu)造方法:super([實際參數(shù)]);6.2.3super關(guān)鍵字調(diào)用父類的構(gòu)造方法有如下的規(guī)則:在構(gòu)造子類對象時,父類的構(gòu)造方法一定會被調(diào)用;如果子類的構(gòu)造方法使用了super調(diào)用父類的構(gòu)造方法,則按給定的參數(shù)調(diào)用父類中相應(yīng)的構(gòu)造方法;如果在子類的構(gòu)造方法中沒有使用super調(diào)用父類的構(gòu)造方法,則父類中的沒有參數(shù)的構(gòu)造方法會被自動調(diào)用。如果子類沒有使用super調(diào)用父類構(gòu)造方法并且父類中也沒有定義沒有參數(shù)的構(gòu)造方法,則編譯不能通過。6.2.3super關(guān)鍵字【例6.5】平面上有若干條線段,已知每條線段兩個端點的坐標(biāo)。設(shè)計線段類并創(chuàng)建線段類的對象表示線段。要求用繼承的方法實現(xiàn)。Example6_05.java如果父類和子類中都定義了實例初始化器,則構(gòu)造子類對象時,調(diào)用順序為“父類的實例初始化器→父類的構(gòu)造方法→子類的實例初始化器→子類的構(gòu)造方法”。C目錄ONTENTS6.2域的隱藏和方法的重寫6.3對象的賦值兼容規(guī)則6.7泛型6.1子類及其對象6.4final關(guān)鍵字6.5多態(tài)6.6abstract關(guān)鍵字6.8小結(jié)6.3

對象的賦值兼容規(guī)則在有繼承關(guān)系的類中,可以用父類對象表示子類的對象,稱為賦值兼容規(guī)則。例如,類B是類A的子類,則下面的賦值是正確的:Aa=newB();當(dāng)用父類對象表示子類對象時,父類對象稱為子類對象的上轉(zhuǎn)型對象。當(dāng)一個父類對象表示的是子類對象時,還可以將該父類對象強(qiáng)制轉(zhuǎn)換成子類對象。如:Bb=(B)a;將上轉(zhuǎn)型對象轉(zhuǎn)換為子類對象稱為下轉(zhuǎn)型對象。6.3

對象的賦值兼容規(guī)則當(dāng)用一個父類對象表示子類對象后,父類對象:可以訪問子類繼承自父類的域或被子類隱藏的域;可以調(diào)用子類繼承自父類的方法或被子類重寫的方法;不能訪問子類相對于父類新增加的域或方法。所以,通過父類訪問的域或方法一定是繼承自父類的域或方法、或者是隱藏繼承自父類的域、或者是重寫繼承自父類的方法。使用賦值兼容規(guī)則主要是為了實現(xiàn)多態(tài)性。C目錄ONTENTS6.2域的隱藏和方法的重寫6.3對象的賦值兼容規(guī)則6.7泛型6.1子類及其對象6.4final關(guān)鍵字6.5多態(tài)6.6abstract關(guān)鍵字6.8小結(jié)6.4.1final修飾類關(guān)鍵字final可以修飾類,可以修飾方法,還可以修飾域。finalclass類名{//……}final修飾的類稱為最終類。修飾的形式:最終類不能派生子類。定義最終類的目的是不希望父類中的域被子類隱藏、方法被子類重寫,可以對類起到保護(hù)作用。典型的最終類就是String類。6.4.2final修飾方法[訪問限定詞][static]final方法類型方法名([參數(shù)]){//……}final修飾的方法稱為最終方法。修飾的形式:最終方法可以被子類繼承,但不能被子類重寫,從而對父類的方法起到保護(hù)作用。6.4.3常量final修飾的域稱為最終域,又稱為常量。修飾的形式:[訪問限定詞][static]final數(shù)據(jù)類型域名=初值;C目錄ONTENTS6.2域的隱藏和方法的重寫6.3對象的賦值兼容規(guī)則6.7泛型6.1子類及其對象6.4final關(guān)鍵字6.5多態(tài)6.6abstract關(guān)鍵字6.8小結(jié)6.5.1多態(tài)概念同一類對象表現(xiàn)出的不同行為稱為多態(tài)。多態(tài)的實現(xiàn)一定得在有繼承關(guān)系的對象中。每一個子類的對象的行為都與其它子類對象或父類對象的行為不同,這種行為上的不同稱為多態(tài)性。程序設(shè)計語言本身必須支持多態(tài)性,編程時才能夠?qū)崿F(xiàn)多態(tài)性。6.5.2多態(tài)的實現(xiàn)經(jīng)過下面幾步可以實現(xiàn)多態(tài)性:通過父類對象名調(diào)用被子類重寫的方法。【例6.6】有多種交通工具,利用多態(tài)性表現(xiàn)出每種交通工具的正確運行狀態(tài)。

Example6_06.java定義一個基類,在此基類基礎(chǔ)上再派生出若干個子類;01OPTION02OPTION03OPTION04OPTION子類要重寫父類中的方法,使子類對象能夠表現(xiàn)出子類的行為;用父類對象名表示子類對象(賦值兼容規(guī)則);C目錄ONTENTS6.2域的隱藏和方法的重寫6.3對象的賦值兼容規(guī)則6.7泛型6.1子類及其對象6.4final關(guān)鍵字6.5多態(tài)6.6abstract關(guān)鍵字6.8小結(jié)6.6.1abstract修飾類關(guān)鍵字abstract修飾的類稱為抽象類。抽象類定義的形式:關(guān)鍵字abstract可以修飾類,也可以修飾類中的方法。abstractclass類名{//……}抽象類不能生成對象實例。6.6.2abstract修飾方法關(guān)鍵字abstract修飾的方法稱為抽象方法。抽象方法定義的形式:[訪問限定詞]abstract數(shù)據(jù)類型方法名([參數(shù)表列]);抽象方法只有方法的頭部,沒有方法體。抽象方法一定不能用關(guān)鍵字final修飾。抽象類中可以有非抽象(實例)方法,也可以有抽象方法。如果一個類中有抽象方法,該類必須定義成抽象類?!纠?.7】有若干個圓和矩形,已知每個圓的半徑和矩形的長、寬,計算這些圓和矩形的面積和周長。Example6_07.javaC目錄ONTENTS6.2域的隱藏和方法的重寫6.3對象的賦值兼容規(guī)則6.7泛型6.1子類及其對象6.4final關(guān)鍵字6.5多態(tài)6.6abstract關(guān)鍵字6.8小結(jié)6.7.1泛型的概念

比類更高一層的抽象表示。泛型類,就是可以將封裝方式相同但屬性類型不同的多個類用一個泛型類表示,減少程序的開發(fā)工作量,提高軟件的開發(fā)效率。泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)。6.7.2聲明泛型類泛型類是帶有類型參數(shù)的類,類中有域和行為。域的數(shù)據(jù)類型可以是已有類型,也可以是“類型參數(shù)”的類型。泛型類方法的類型、參數(shù)和方法中的局部變量可以是已有類型,也可以是“類型參數(shù)”的類型。泛型類的定義形式是:class泛型類名<類型參數(shù)表列>{ //類體}在“泛型類名”后的“<>”指明類型參數(shù)的名字,如果多個用英文逗號分隔。類型參數(shù)的名字就是在類體中要用到的表示數(shù)據(jù)類型的符號,一般是合法的標(biāo)識符就行,但通常用T、E、K、V等表示。約定:T(type)表示具體的一個java類型,K、V分別代表java鍵值對中的Key和Value,E代表Element。6.7.2聲明泛型類泛型類的對象的定義:泛型類名[<實際類型表列>]對象名=new泛型類名[<實際類型表列>]([形參表]);或泛型類名[<實際類型表列>]對象名=new泛型類名[<>]([形參表]);【例6.8】設(shè)計一個數(shù)組類,該類的對象能表示任何類型的對象數(shù)組(以非泛型方式實現(xiàn))。Example6_08.java實際類型不能是基本數(shù)據(jù)類型,必須是類或接口類型。<實際類型參數(shù)表列>也可以不寫,如果不寫,則泛型類中的所有對象都看作是Object類的對象。也可以用“?”代替“實際參數(shù)表列”,“?”表示可以是任何一個類,叫通配符?!纠?.9】以泛型方式實現(xiàn)例6.8的功能。Example6_09.java6.7.3聲明泛型接口除了可以定義泛型類外,還可以定義泛型接口。泛型接口定義形式:interface接口名<類型參數(shù)表列>{//……}6.7.3聲明泛型接口在實現(xiàn)接口時,也應(yīng)該聲明與接口相同的類型參數(shù)。實現(xiàn)形式如下:class類名<類型參數(shù)表列>implements接口名<類型參數(shù)表列>{//…}【例6.10】定義泛型接口并實現(xiàn)泛型接口。Example6_10.java6.7.4聲明泛型方法[訪問限定詞][static]<類型參數(shù)表列>方法類型方法名([參數(shù)表列]){//…}方法也可以是泛型方法,泛型方法可以定義在泛型類中,也可以定義在非泛型類中。泛型方法定義形式:【例6.11】泛型方法的定義與使用。Example6_11.java6.7.5泛型參數(shù)的限定有時候只想接收指定范圍內(nèi)的類類型,過多的類型就可能會產(chǎn)生錯誤,這時可以對泛型的參數(shù)時進(jìn)行限定。參數(shù)限定的語法形式:類型形式參數(shù)extends父類“類型形式參數(shù)”是指聲明泛型類時所聲明的類型,“父類”表示只有這個類下面的子類才可以做實際類型?!纠?.12】定義一個泛型類,能夠找出多個數(shù)據(jù)中的最大數(shù)和最小數(shù)。Example6_12.java6.7.6泛型的使用及通配符上界通配符的定義形式:

C<?extendsT>C表示泛型類,T表示類型或者接口,此處只能一個,?代表泛型里的元素類型,“?extendsT”表示它必須是T的子類(也包括自身)或?qū)崿F(xiàn)了T接口的類。下界通配符的定義形式:C<?superT>這里的T同樣只能是一個類或接口,也不能多個。?代表泛型里的元素類型,“?superT”表示它必須是T的超類(包括自身)?!纠?.13】泛型及泛型通配符的簡單使用。Example6_13.java6.7.6泛型的使用及通配符上界<?extendsT>不能往里存,只能往外?。?lt;?extendsT>會使往盤子里放東西的set()方法失效,但取東西get()方法還有效,取出來的東西只能存放在T或它的基類里面,向上轉(zhuǎn)型。下界<?superT>不影響往里存,但往外取只能放在Object對象里:使用下界<?superT>會使從盤子里取東西的get()方法部分失效,只能存放到Object對象里。因為規(guī)定的下界,對于上界并不清楚,所以只能放到最根本的基類Object中;set()方法正常。6.7.6泛型的使用及通配符使用上界通配符,下界通配符遵循原則:PECS原則。PECS(ProducerExtendsConsumerSuper)原則中,ProducerExtends生產(chǎn)者使用Extends來確定上界,往里面放東西表示生產(chǎn)。ConsumerSuper消費者使用Super來確定下界,往外取東西表示消費。頻繁往外讀取內(nèi)容的,適合用上界exte

溫馨提示

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

最新文檔

評論

0/150

提交評論