




已閱讀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章超類、子類和繼承性,繼承:類繼承另一個(gè)類,這個(gè)類除了創(chuàng)建自己的成員外,還能夠繼承或擴(kuò)展另一個(gè)類的成員運(yùn)用繼承,你能夠創(chuàng)建一個(gè)通用類,它定義了一系列相關(guān)項(xiàng)目的一般特性。該類可以被更具體的類繼承,每個(gè)具體的類都增加一些自己特有的東西。被繼承的類叫超類(superclass),繼承超類的類叫子類(subclass),類的繼承,繼承性特性如下:?jiǎn)我焕^承性:子類只能有一個(gè)超類,而超類可以有多個(gè)子類;子類繼承超類的所有成員;子類可以創(chuàng)建自己的成員;子類不能繼承超類的構(gòu)造器,只能在構(gòu)造器中通過(guò)super()調(diào)用超類的構(gòu)造器;子類的構(gòu)造器首先要調(diào)用超類的構(gòu)造器;多態(tài)性之一:子類的成員隱藏和覆蓋超類中相同的成員;多態(tài)性之二:超類的對(duì)象可以對(duì)子類的實(shí)例引用;由abstract和final修飾的類指示類的是否必須或不能被繼承。,類的繼承,創(chuàng)建子類,格式如下:abstract|finalclassSubClsextendsSupClsSubClassBodyabstract是可選項(xiàng),修飾的類叫抽象類,指示其對(duì)象引用的必須是其子類實(shí)例;final是可選項(xiàng),修飾的類叫終結(jié)類,指示其不能被繼承,不能有子類;SubCls是創(chuàng)建的類,稱為子類;extends是關(guān)鍵字,指示兩個(gè)類存在的繼承關(guān)系;SuperCls是SubCls類的超類。,類的繼承,在創(chuàng)建類時(shí),若缺省extends,則該類就為Object類的直接子類。Object類是Java語(yǔ)言中所有類的直接或間接超類。Object類存放在java.lang包中。子類繼承了超類的所有成員,但是無(wú)法訪問(wèn)某些受限的成員子類中可以訪問(wèn)從超類繼承下來(lái)的三種訪問(wèn)權(quán)限設(shè)定的成員public;protected;缺省。,類的繼承,類的繼承,父類(超類),子類,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;,類Person有成員:成員變量:name、sex、birthday成員方法:setData(String,char,Date)類Student有成員:成員變量:name、sex、birthday、stuID、speciality成員方法:setData(String,char,Date)、setData(String,char,Date,String,String)其中:紅色標(biāo)識(shí)的成員是類Student繼承超類Person的成員。,類的繼承,SimpleInheritance.java,雖然子類可以繼承超類所有成員,但是因?yàn)槌愔谐蓡T的訪問(wèn)控制,子類無(wú)法訪問(wèn)某些受限成員。在超類中,由private修飾的訪問(wèn)權(quán)限的成員變量和方法,雖然被子類繼承,但是子類不能訪問(wèn)。,類的繼承,Access.java,一個(gè)更實(shí)際的例子:為了新的功能而編寫子類,類的繼承,DemoBoxWeight.java,超類對(duì)象可以引用子類實(shí)例,類的繼承,RefDemo.java,第5章超類、子類和繼承性,Java語(yǔ)言中,每個(gè)類均有三個(gè)量,它們具有特別的含義及用途。nullthissuper,null,this和super,nullnull表示變量的值為“空”,用于表示對(duì)象或數(shù)組還沒(méi)有相應(yīng)的實(shí)例引用。例如:PointpNull=null;,null,this和super,this表示對(duì)類的實(shí)例訪問(wèn),它也表示了對(duì)象對(duì)該實(shí)例引用訪問(wèn)。;在類中可以來(lái)指向成員變量,以示區(qū)別于非成員變量;在構(gòu)造器中,使用this()形式對(duì)另一個(gè)構(gòu)造器的調(diào)用;在類的創(chuàng)建中,需要表示對(duì)自身的實(shí)例訪問(wèn)時(shí),用this表示。,null,this和super,HSBColor.java,super在子類中,使用super訪問(wèn)被隱藏的超類變量,被覆蓋的超類方法。使用有三種情況:訪問(wèn)被隱藏的超類成員變量;例如:super.varName調(diào)用超類中被覆蓋的方法;例如:super.methodName(paramList)調(diào)用超類中的構(gòu)造方法.例如:super(paramList),null,this和super,UseSuper.java,DemoSuper.java,super()總是引用子類最接近的超類的構(gòu)造函數(shù)。在類層次結(jié)構(gòu)中,如果超類構(gòu)造函數(shù)需要參數(shù),那么不論子類它自己需不需要參數(shù),所有子類必須向上傳遞這些參數(shù)。,多級(jí)類層次,DemoShipment.java,super()必須是子類構(gòu)造函數(shù)的第一個(gè)執(zhí)行語(yǔ)句,無(wú)論你用到了super()沒(méi)有,這個(gè)次序不變。如果super()沒(méi)有被用到,每個(gè)超類的默認(rèn)的或無(wú)參數(shù)的構(gòu)造函數(shù)將執(zhí)行。,何時(shí)調(diào)用構(gòu)造函數(shù),CallingCons.java,第5章超類、子類和繼承性,成員變量的隱藏:在子類的創(chuàng)建中,如果出現(xiàn)了與其超類相同的成員變量,則超類中的成員變量被子類中的成員變量所隱藏。成員方法的覆蓋:在子類的創(chuàng)建中,如果出現(xiàn)與超類中有相同名、同參數(shù)及同返回類型的成員方法,則超類中的成員方法被子類中的成員方法所覆蓋。,類的繼承,TestCovert.java,方法覆蓋:在子類的創(chuàng)建中,具有與超類中有相同的方法名、相同的參數(shù)以及相同的返回?cái)?shù)據(jù)類型。它還具有比超類中被覆蓋方法更大的可訪問(wèn)性,即權(quán)限限制更寬松。publicprotected缺省private不同于方法過(guò)載。方法過(guò)載是在一個(gè)類中具有相同方法名的方法,它們之間有不同的參數(shù)。,方法覆蓋與運(yùn)行時(shí)的多態(tài),運(yùn)行時(shí)的多態(tài)超類的對(duì)象可以引用子類的實(shí)例(上轉(zhuǎn)型)該對(duì)象仍然只能夠調(diào)用超類中定義的方法和變量對(duì)于覆蓋或繼承的方法,Java運(yùn)行時(shí)系統(tǒng)根據(jù)調(diào)用該方法的實(shí)例的類型來(lái)決定選擇哪個(gè)方法調(diào)用。對(duì)子類的一個(gè)實(shí)例,如果子類覆蓋了超類的方法,則運(yùn)行時(shí)系統(tǒng)調(diào)用子類的方法。如果子類繼承了超類的方法(未覆蓋),則運(yùn)行時(shí)系統(tǒng)調(diào)用超類的方法。,方法覆蓋與運(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()是子類ClassB中的方法。,方法覆蓋與運(yùn)行時(shí)的多態(tài),當(dāng)超類的對(duì)象對(duì)子類實(shí)例引用時(shí),這個(gè)對(duì)象所訪問(wèn)的成員必須是超類中所具有的。這個(gè)對(duì)象不能訪問(wèn)子類自己創(chuàng)建的成員。當(dāng)這個(gè)對(duì)象訪問(wèn)的是被覆蓋的方法,則調(diào)用的是子類中覆蓋方法。只有當(dāng)這個(gè)對(duì)象被強(qiáng)制轉(zhuǎn)換成子類類型時(shí),這個(gè)子類的所有成員才有可能被訪問(wèn)。,方法覆蓋與運(yùn)行時(shí)的多態(tài),Dispatch.java,FindAreas.java,TestMethodHidden.java,TestMethodAndVar.java,第5章超類、子類和繼承性,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)銷。,final和abstract,FinalData.java,空白final盡管被聲明成final,但卻未得到一個(gè)初始值??瞻譮inal必須在實(shí)際使用前得到正確的初始化??瞻譮inal具有最大的靈活性:位于類內(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ù)穆暶?。在一個(gè)方法的內(nèi)部,不能改變?cè)揻inal參數(shù)。,final和abstract,FinalArguments.java,final類由final修飾的類稱終結(jié)類,不能被繼承。由于安全性的原因或者是面向?qū)ο笤O(shè)計(jì)的考慮,限定一些類不能被繼承。final類不能被繼承,保證了該類的唯一性。對(duì)于一個(gè)類的定義已經(jīng)很完善,不需再創(chuàng)建它的子類,也可以將其修飾為final類。格式:finalclassfinalClassName.,final和abstract,Jurassic.java,final方法以final修飾的方法是不能被子類的方法所覆蓋。其格式為:finalreturnTypemethodName(paraList).可有效地“關(guān)閉”動(dòng)態(tài)綁定,或者告訴編譯器不需要進(jìn)行動(dòng)態(tài)綁定。編譯器就可為final方法調(diào)用生成效率更高的代碼。,final和abstract,abstract類和方法當(dāng)一個(gè)類的定義完全表示抽象概念時(shí),它不能夠被實(shí)例化為一個(gè)對(duì)象。抽象類本身存在未實(shí)現(xiàn)的方法(abstract方法),這些方法不具備實(shí)際功能,它只能衍生出子類,抽象方法則由衍生子類時(shí)所覆蓋。abstract方法必須是在abstract類中,但是abstract類中也可以有非abstract方法。,final和abstract,abstract類和方法abstract類格式:abstractclassabstractClassName.abstract方法格式為:abstractreturnTypemethodName(paraList);abstract方法是沒(méi)有語(yǔ)句實(shí)現(xiàn)部分,直接由;結(jié)束。abstract方法必須是在abstract類中,并由其子類的方法覆蓋。,final和abstract,在創(chuàng)建抽象方法時(shí),要注意有下面三種方法不能作為抽象方法定義:構(gòu)造方法類方法私有方法,final和abstract,TestAbst.java,AbstractAreas.java,第5章超類、子類和繼承性,Object類Object類處于Java開(kāi)發(fā)環(huán)境的類層次樹的根部,處于Java類層的最高層的一個(gè)類,是所有類的超類。其它所有的類都直接或間接地為它的子類。該類定義了一些所有對(duì)象的最基本的狀態(tài)和行為,包括與同類對(duì)象相比較,轉(zhuǎn)化為字符串等,Object類,Java語(yǔ)言中類的繼承性有什么特點(diǎn)?子類可以繼承超類的什么,不能繼承的如何在子類中訪問(wèn)?子類對(duì)超類的擴(kuò)展表現(xiàn)在哪些方面?舉例說(shuō)明。方法覆蓋是指什么,它與方法過(guò)載有什么不同?舉例說(shuō)明。在Java中有哪些是多態(tài)性的表現(xiàn)?舉例說(shuō)明。用final和abstract修飾的類各有什么特點(diǎn)?用final和abstract修飾的方法各有什么特點(diǎn)?舉例說(shuō)明Object類的方法equals()的使用情況。,思考,有兩個(gè)類Person和Student,它們存在繼承關(guān)系。在Person中,有成員變量name,sex,age三個(gè),它們類型分別為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類是Person類的子類,在Student中,有int類型的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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 植樹問(wèn)題課件圖片
- 藥品研發(fā)中心院感監(jiān)控工作計(jì)劃
- 醫(yī)院安全隱患排查報(bào)告范文
- 未成年人保護(hù)工作中的法律責(zé)任心得體會(huì)
- 服務(wù)行業(yè)運(yùn)營(yíng)主管工作總結(jié)范文
- 秋季幼兒園食品安全保障計(jì)劃
- 五年級(jí)下冊(cè)科學(xué)實(shí)踐活動(dòng)實(shí)施計(jì)劃
- 餐飲業(yè)服務(wù)質(zhì)量提升及效率保證措施
- 幼兒園特色項(xiàng)目自查報(bào)告范文
- 2025年小學(xué)校外拓展活動(dòng)計(jì)劃
- 中藥養(yǎng)護(hù)記錄表
- 《融媒體實(shí)務(wù)》教學(xué)課件(全)
- 從deepfakes深度偽造技術(shù)看AI安全
- 中小企業(yè)的網(wǎng)絡(luò)組建局域網(wǎng)的組建網(wǎng)絡(luò)的組建與規(guī)劃網(wǎng)絡(luò)結(jié)構(gòu)拓?fù)鋱D
- 天津保利物業(yè)供貨合同范本
- 2023年天津市南開(kāi)醫(yī)院護(hù)士招聘考試歷年高頻考點(diǎn)試題含答案
- 退役軍人事務(wù)局一體化平臺(tái)解決方案
- 2023年中小學(xué)生籃球比賽報(bào)名表
- 2023年成都市新都區(qū)九年級(jí)二診英語(yǔ)試題(含答案和音頻)
- ABAQUS官方培訓(xùn)資料PPTlecture8-quasi-static
- 手語(yǔ)操比賽方案
評(píng)論
0/150
提交評(píng)論