




已閱讀5頁(yè),還剩36頁(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)介
面向?qū)ο蟪绦蛟O(shè)計(jì)Java,ChenzhengMar.2012,第5章超類(lèi)、子類(lèi)和繼承性,繼承:類(lèi)繼承另一個(gè)類(lèi),這個(gè)類(lèi)除了創(chuàng)建自己的成員外,還能夠繼承或擴(kuò)展另一個(gè)類(lèi)的成員運(yùn)用繼承,你能夠創(chuàng)建一個(gè)通用類(lèi),它定義了一系列相關(guān)項(xiàng)目的一般特性。該類(lèi)可以被更具體的類(lèi)繼承,每個(gè)具體的類(lèi)都增加一些自己特有的東西。被繼承的類(lèi)叫超類(lèi)(superclass),繼承超類(lèi)的類(lèi)叫子類(lèi)(subclass),類(lèi)的繼承,繼承性特性如下:?jiǎn)我焕^承性:子類(lèi)只能有一個(gè)超類(lèi),而超類(lèi)可以有多個(gè)子類(lèi);子類(lèi)繼承超類(lèi)的所有成員;子類(lèi)可以創(chuàng)建自己的成員;子類(lèi)不能繼承超類(lèi)的構(gòu)造器,只能在構(gòu)造器中通過(guò)super()調(diào)用超類(lèi)的構(gòu)造器;子類(lèi)的構(gòu)造器首先要調(diào)用超類(lèi)的構(gòu)造器;多態(tài)性之一:子類(lèi)的成員隱藏和覆蓋超類(lèi)中相同的成員;多態(tài)性之二:超類(lèi)的對(duì)象可以對(duì)子類(lèi)的實(shí)例引用;由abstract和final修飾的類(lèi)指示類(lèi)的是否必須或不能被繼承。,類(lèi)的繼承,創(chuàng)建子類(lèi),格式如下:abstract|finalclassSubClsextendsSupClsSubClassBodyabstract是可選項(xiàng),修飾的類(lèi)叫抽象類(lèi),指示其對(duì)象引用的必須是其子類(lèi)實(shí)例;final是可選項(xiàng),修飾的類(lèi)叫終結(jié)類(lèi),指示其不能被繼承,不能有子類(lèi);SubCls是創(chuàng)建的類(lèi),稱為子類(lèi);extends是關(guān)鍵字,指示兩個(gè)類(lèi)存在的繼承關(guān)系;SuperCls是SubCls類(lèi)的超類(lèi)。,類(lèi)的繼承,在創(chuàng)建類(lèi)時(shí),若缺省extends,則該類(lèi)就為Object類(lèi)的直接子類(lèi)。Object類(lèi)是Java語(yǔ)言中所有類(lèi)的直接或間接超類(lèi)。Object類(lèi)存放在java.lang包中。子類(lèi)繼承了超類(lèi)的所有成員,但是無(wú)法訪問(wèn)某些受限的成員子類(lèi)中可以訪問(wèn)從超類(lèi)繼承下來(lái)的三種訪問(wèn)權(quán)限設(shè)定的成員public;protected;缺省。,類(lèi)的繼承,類(lèi)的繼承,父類(lèi)(超類(lèi)),子類(lèi),classPersonStringname;charsex;Datebirthday;voidsetData(Stringn,chars,Dateb)name=n;sex=s;birthday=b;,classStudentextendsPersonStringstuID;Stringspeciality;voidsetData(Stringn,chars,Dateb,Stringid,Stringspec)setData(n,s,b);stuID=id;speciality=spec;,類(lèi)Person有成員:成員變量:name、sex、birthday成員方法:setData(String,char,Date)類(lèi)Student有成員:成員變量:name、sex、birthday、stuID、speciality成員方法:setData(String,char,Date)、setData(String,char,Date,String,String)其中:紅色標(biāo)識(shí)的成員是類(lèi)Student繼承超類(lèi)Person的成員。,類(lèi)的繼承,SimpleInheritance.java,雖然子類(lèi)可以繼承超類(lèi)所有成員,但是因?yàn)槌?lèi)中成員的訪問(wèn)控制,子類(lèi)無(wú)法訪問(wèn)某些受限成員。在超類(lèi)中,由private修飾的訪問(wèn)權(quán)限的成員變量和方法,雖然被子類(lèi)繼承,但是子類(lèi)不能訪問(wèn)。,類(lèi)的繼承,Access.java,一個(gè)更實(shí)際的例子:為了新的功能而編寫(xiě)子類(lèi),類(lèi)的繼承,DemoBoxWeight.java,超類(lèi)對(duì)象可以引用子類(lèi)實(shí)例,類(lèi)的繼承,RefDemo.java,第5章超類(lèi)、子類(lèi)和繼承性,Java語(yǔ)言中,每個(gè)類(lèi)均有三個(gè)量,它們具有特別的含義及用途。nullthissuper,null,this和super,nullnull表示變量的值為“空”,用于表示對(duì)象或數(shù)組還沒(méi)有相應(yīng)的實(shí)例引用。例如:PointpNull=null;,null,this和super,this表示對(duì)類(lèi)的實(shí)例訪問(wèn),它也表示了對(duì)象對(duì)該實(shí)例引用訪問(wèn)。;在類(lèi)中可以來(lái)指向成員變量,以示區(qū)別于非成員變量;在構(gòu)造器中,使用this()形式對(duì)另一個(gè)構(gòu)造器的調(diào)用;在類(lèi)的創(chuàng)建中,需要表示對(duì)自身的實(shí)例訪問(wèn)時(shí),用this表示。,null,this和super,HSBColor.java,super在子類(lèi)中,使用super訪問(wèn)被隱藏的超類(lèi)變量,被覆蓋的超類(lèi)方法。使用有三種情況:訪問(wèn)被隱藏的超類(lèi)成員變量;例如:super.varName調(diào)用超類(lèi)中被覆蓋的方法;例如:super.methodName(paramList)調(diào)用超類(lèi)中的構(gòu)造方法.例如:super(paramList),null,this和super,UseSuper.java,DemoSuper.java,super()總是引用子類(lèi)最接近的超類(lèi)的構(gòu)造函數(shù)。在類(lèi)層次結(jié)構(gòu)中,如果超類(lèi)構(gòu)造函數(shù)需要參數(shù),那么不論子類(lèi)它自己需不需要參數(shù),所有子類(lèi)必須向上傳遞這些參數(shù)。,多級(jí)類(lèi)層次,DemoShipment.java,super()必須是子類(lèi)構(gòu)造函數(shù)的第一個(gè)執(zhí)行語(yǔ)句,無(wú)論你用到了super()沒(méi)有,這個(gè)次序不變。如果super()沒(méi)有被用到,每個(gè)超類(lèi)的默認(rèn)的或無(wú)參數(shù)的構(gòu)造函數(shù)將執(zhí)行。,何時(shí)調(diào)用構(gòu)造函數(shù),CallingCons.java,第5章超類(lèi)、子類(lèi)和繼承性,成員變量的隱藏:在子類(lèi)的創(chuàng)建中,如果出現(xiàn)了與其超類(lèi)相同的成員變量,則超類(lèi)中的成員變量被子類(lèi)中的成員變量所隱藏。成員方法的覆蓋:在子類(lèi)的創(chuàng)建中,如果出現(xiàn)與超類(lèi)中有相同名、同參數(shù)及同返回類(lèi)型的成員方法,則超類(lèi)中的成員方法被子類(lèi)中的成員方法所覆蓋。,類(lèi)的繼承,TestCovert.java,方法覆蓋:在子類(lèi)的創(chuàng)建中,具有與超類(lèi)中有相同的方法名、相同的參數(shù)以及相同的返回?cái)?shù)據(jù)類(lèi)型。它還具有比超類(lèi)中被覆蓋方法更大的可訪問(wèn)性,即權(quán)限限制更寬松。publicprotected缺省private不同于方法過(guò)載。方法過(guò)載是在一個(gè)類(lèi)中具有相同方法名的方法,它們之間有不同的參數(shù)。,方法覆蓋與運(yùn)行時(shí)的多態(tài),運(yùn)行時(shí)的多態(tài)超類(lèi)的對(duì)象可以引用子類(lèi)的實(shí)例(上轉(zhuǎn)型)該對(duì)象仍然只能夠調(diào)用超類(lèi)中定義的方法和變量對(duì)于覆蓋或繼承的方法,Java運(yùn)行時(shí)系統(tǒng)根據(jù)調(diào)用該方法的實(shí)例的類(lèi)型來(lái)決定選擇哪個(gè)方法調(diào)用。對(duì)子類(lèi)的一個(gè)實(shí)例,如果子類(lèi)覆蓋了超類(lèi)的方法,則運(yùn)行時(shí)系統(tǒng)調(diào)用子類(lèi)的方法。如果子類(lèi)繼承了超類(lèi)的方法(未覆蓋),則運(yùn)行時(shí)系統(tǒng)調(diào)用超類(lèi)的方法。,方法覆蓋與運(yùn)行時(shí)的多態(tài),classClassAvoidcallMe()System.out.println(在ClassA中的callMe()方法!);classClassBextendsClassAvoidcallMe()System.out.println(在ClassB中的callMe()方法!);,方法覆蓋與運(yùn)行時(shí)的多態(tài),publicclassTestConvertpublicstaticvoidmain(Stringarg)ClassAvA=newClassB();vA.callMe();程序運(yùn)行輸出的是:在ClassB中的callMe()方法!結(jié)果說(shuō)明了vA調(diào)用callMe()是子類(lèi)ClassB中的方法。,方法覆蓋與運(yùn)行時(shí)的多態(tài),當(dāng)超類(lèi)的對(duì)象對(duì)子類(lèi)實(shí)例引用時(shí),這個(gè)對(duì)象所訪問(wèn)的成員必須是超類(lèi)中所具有的。這個(gè)對(duì)象不能訪問(wèn)子類(lèi)自己創(chuàng)建的成員。當(dāng)這個(gè)對(duì)象訪問(wèn)的是被覆蓋的方法,則調(diào)用的是子類(lèi)中覆蓋方法。只有當(dāng)這個(gè)對(duì)象被強(qiáng)制轉(zhuǎn)換成子類(lèi)類(lèi)型時(shí),這個(gè)子類(lèi)的所有成員才有可能被訪問(wèn)。,方法覆蓋與運(yùn)行時(shí)的多態(tài),Dispatch.java,FindAreas.java,TestMethodHidden.java,TestMethodAndVar.java,第5章超類(lèi)、子類(lèi)和繼承性,final關(guān)鍵字“這個(gè)東西不能改變”考慮到兩方面的因素:設(shè)計(jì)或效率,final和abstract,final數(shù)據(jù)許多程序設(shè)計(jì)語(yǔ)言都有自己的辦法告訴編譯器某個(gè)數(shù)據(jù)是“常數(shù)”。常數(shù)主要應(yīng)用于下述兩個(gè)方面:(1)編譯期常數(shù),它永遠(yuǎn)不會(huì)改變(2)在運(yùn)行期初始化的一個(gè)值,我們不希望它發(fā)生變化對(duì)于編譯期的常數(shù),編譯器(程序)可將常數(shù)值“封裝”到需要的計(jì)算過(guò)程里。也就是說(shuō),計(jì)算可在編譯期間提前執(zhí)行,從而節(jié)省運(yùn)行時(shí)的一些開(kāi)銷(xiāo)。,final和abstract,FinalData.java,空白final盡管被聲明成final,但卻未得到一個(gè)初始值??瞻譮inal必須在實(shí)際使用前得到正確的初始化??瞻譮inal具有最大的靈活性:位于類(lèi)內(nèi)部的一個(gè)final字段現(xiàn)在對(duì)每個(gè)對(duì)象都可以有所不同,同時(shí)依然保持其“不變”的本質(zhì)。,final和abstract,BlankFinal.java,final參數(shù)將參數(shù)設(shè)成final屬性,方法是在參數(shù)列表中對(duì)它們進(jìn)行適當(dāng)?shù)穆暶鳌T谝粋€(gè)方法的內(nèi)部,不能改變?cè)揻inal參數(shù)。,final和abstract,FinalArguments.java,final類(lèi)由final修飾的類(lèi)稱終結(jié)類(lèi),不能被繼承。由于安全性的原因或者是面向?qū)ο笤O(shè)計(jì)的考慮,限定一些類(lèi)不能被繼承。final類(lèi)不能被繼承,保證了該類(lèi)的唯一性。對(duì)于一個(gè)類(lèi)的定義已經(jīng)很完善,不需再創(chuàng)建它的子類(lèi),也可以將其修飾為final類(lèi)。格式:finalclassfinalClassName.,final和abstract,Jurassic.java,final方法以final修飾的方法是不能被子類(lèi)的方法所覆蓋。其格式為:finalreturnTypemethodName(paraList).可有效地“關(guān)閉”動(dòng)態(tài)綁定,或者告訴編譯器不需要進(jìn)行動(dòng)態(tài)綁定。編譯器就可為final方法調(diào)用生成效率更高的代碼。,final和abstract,abstract類(lèi)和方法當(dāng)一個(gè)類(lèi)的定義完全表示抽象概念時(shí),它不能夠被實(shí)例化為一個(gè)對(duì)象。抽象類(lèi)本身存在未實(shí)現(xiàn)的方法(abstract方法),這些方法不具備實(shí)際功能,它只能衍生出子類(lèi),抽象方法則由衍生子類(lèi)時(shí)所覆蓋。abstract方法必須是在abstract類(lèi)中,但是abstract類(lèi)中也可以有非abstract方法。,final和abstract,abstract類(lèi)和方法abstract類(lèi)格式:abstractclassabstractClassName.abstract方法格式為:abstractreturnTypemethodName(paraList);abstract方法是沒(méi)有語(yǔ)句實(shí)現(xiàn)部分,直接由;結(jié)束。abstract方法必須是在abstract類(lèi)中,并由其子類(lèi)的方法覆蓋。,final和abstract,在創(chuàng)建抽象方法時(shí),要注意有下面三種方法不能作為抽象方法定義:構(gòu)造方法類(lèi)方法私有方法,final和abstract,TestAbst.java,AbstractAreas.java,第5章超類(lèi)、子類(lèi)和繼承性,Object類(lèi)Object類(lèi)處于Java開(kāi)發(fā)環(huán)境的類(lèi)層次樹(shù)的根部,處于Java類(lèi)層的最高層的一個(gè)類(lèi),是所有類(lèi)的超類(lèi)。其它所有的類(lèi)都直接或間接地為它的子類(lèi)。該類(lèi)定義了一些所有對(duì)象的最基本的狀態(tài)和行為,包括與同類(lèi)對(duì)象相比較,轉(zhuǎn)化為字符串等,Object類(lèi),Java語(yǔ)言中類(lèi)的繼承性有什么特點(diǎn)?子類(lèi)可以繼承超類(lèi)的什么,不能繼承的如何在子類(lèi)中訪問(wèn)?子類(lèi)對(duì)超類(lèi)的擴(kuò)展表現(xiàn)在哪些方面?舉例說(shuō)明。方法覆蓋是指什么,它與方法過(guò)載有什么不同?舉例說(shuō)明。在Java中有哪些是多態(tài)性的表現(xiàn)?舉例說(shuō)明。用final和abstract修飾的類(lèi)各有什么特點(diǎn)?用final和abstract修飾的方法各有什么特點(diǎn)?舉例說(shuō)明Object類(lèi)的方法equals()的使用情況。,思考,有兩個(gè)類(lèi)Person和Student,它們存在繼承關(guān)系。在Person中,有成員變量name,sex,age三個(gè),它們類(lèi)型分別為String、char、int,有一個(gè)帶參數(shù)的構(gòu)造方法Person(String,char,int),用來(lái)對(duì)成員變量初始化。有成員方法setData(String,char,int)設(shè)置成員變量name,sex,age的值。getData()是不帶參數(shù)且返回值由name、sex和age值構(gòu)成的字符串的成員方法。Student類(lèi)是Person類(lèi)的子類(lèi),在Student中,有int類(lèi)型的sID和classNo成員變量用來(lái)表示學(xué)生的學(xué)號(hào)和班級(jí)號(hào)。它有帶五個(gè)參數(shù)的方法setData()和不帶參數(shù)的方法getData(),setData()方法設(shè)置成員變量的值
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 歷史建筑保護(hù)修復(fù)行業(yè)深度調(diào)研及發(fā)展項(xiàng)目商業(yè)計(jì)劃書(shū)
- 蛋白質(zhì)棒代餐行業(yè)跨境出海項(xiàng)目商業(yè)計(jì)劃書(shū)
- 傳統(tǒng)技藝體驗(yàn)中心行業(yè)深度調(diào)研及發(fā)展項(xiàng)目商業(yè)計(jì)劃書(shū)
- 書(shū)法APP創(chuàng)新創(chuàng)業(yè)項(xiàng)目商業(yè)計(jì)劃書(shū)
- 皮具箱包店行業(yè)深度調(diào)研及發(fā)展項(xiàng)目商業(yè)計(jì)劃書(shū)
- 健身操俱樂(lè)部行業(yè)深度調(diào)研及發(fā)展項(xiàng)目商業(yè)計(jì)劃書(shū)
- 教師教學(xué)能力提升網(wǎng)絡(luò)研修計(jì)劃
- 信息技術(shù)實(shí)驗(yàn)課程教學(xué)計(jì)劃
- 幼兒園環(huán)境衛(wèi)生自查整改措施
- 部編版一年級(jí)下冊(cè)語(yǔ)文家庭作業(yè)計(jì)劃
- 2024年 紹興市交通控股集團(tuán)公司招聘考試筆試真題試題含答案
- 超限模板及高支模安全專項(xiàng)施工方案(論證后)
- 日間化療服務(wù)管理制度
- 暑假散學(xué)典禮課件小學(xué)生
- 2024年涼山州木里縣選聘社區(qū)工作者真題
- 保險(xiǎn)公司攢錢(qián)活動(dòng)方案
- 2025年新高考1卷(新課標(biāo)Ⅰ卷)英語(yǔ)試卷
- 部編版七年級(jí)語(yǔ)文下冊(cè)第4單元試題及答案
- 東莞職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試題庫(kù)
- GB 18613-2020電動(dòng)機(jī)能效限定值及能效等級(jí)
- 阿曼原油評(píng)價(jià)
評(píng)論
0/150
提交評(píng)論