




已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
面向?qū)ο蟪绦蛟O計Java,ChenzhengMar.2012,第5章超類、子類和繼承性,繼承:類繼承另一個類,這個類除了創(chuàng)建自己的成員外,還能夠繼承或擴展另一個類的成員運用繼承,你能夠創(chuàng)建一個通用類,它定義了一系列相關項目的一般特性。該類可以被更具體的類繼承,每個具體的類都增加一些自己特有的東西。被繼承的類叫超類(superclass),繼承超類的類叫子類(subclass),類的繼承,繼承性特性如下:單一繼承性:子類只能有一個超類,而超類可以有多個子類;子類繼承超類的所有成員;子類可以創(chuàng)建自己的成員;子類不能繼承超類的構造器,只能在構造器中通過super()調(diào)用超類的構造器;子類的構造器首先要調(diào)用超類的構造器;多態(tài)性之一:子類的成員隱藏和覆蓋超類中相同的成員;多態(tài)性之二:超類的對象可以對子類的實例引用;由abstract和final修飾的類指示類的是否必須或不能被繼承。,類的繼承,創(chuàng)建子類,格式如下:abstract|finalclassSubClsextendsSupClsSubClassBodyabstract是可選項,修飾的類叫抽象類,指示其對象引用的必須是其子類實例;final是可選項,修飾的類叫終結(jié)類,指示其不能被繼承,不能有子類;SubCls是創(chuàng)建的類,稱為子類;extends是關鍵字,指示兩個類存在的繼承關系;SuperCls是SubCls類的超類。,類的繼承,在創(chuàng)建類時,若缺省extends,則該類就為Object類的直接子類。Object類是Java語言中所有類的直接或間接超類。Object類存放在java.lang包中。子類繼承了超類的所有成員,但是無法訪問某些受限的成員子類中可以訪問從超類繼承下來的三種訪問權限設定的成員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)其中:紅色標識的成員是類Student繼承超類Person的成員。,類的繼承,SimpleInheritance.java,雖然子類可以繼承超類所有成員,但是因為超類中成員的訪問控制,子類無法訪問某些受限成員。在超類中,由private修飾的訪問權限的成員變量和方法,雖然被子類繼承,但是子類不能訪問。,類的繼承,Access.java,一個更實際的例子:為了新的功能而編寫子類,類的繼承,DemoBoxWeight.java,超類對象可以引用子類實例,類的繼承,RefDemo.java,第5章超類、子類和繼承性,Java語言中,每個類均有三個量,它們具有特別的含義及用途。nullthissuper,null,this和super,nullnull表示變量的值為“空”,用于表示對象或數(shù)組還沒有相應的實例引用。例如:PointpNull=null;,null,this和super,this表示對類的實例訪問,它也表示了對象對該實例引用訪問。;在類中可以來指向成員變量,以示區(qū)別于非成員變量;在構造器中,使用this()形式對另一個構造器的調(diào)用;在類的創(chuàng)建中,需要表示對自身的實例訪問時,用this表示。,null,this和super,HSBColor.java,super在子類中,使用super訪問被隱藏的超類變量,被覆蓋的超類方法。使用有三種情況:訪問被隱藏的超類成員變量;例如:super.varName調(diào)用超類中被覆蓋的方法;例如:super.methodName(paramList)調(diào)用超類中的構造方法.例如:super(paramList),null,this和super,UseSuper.java,DemoSuper.java,super()總是引用子類最接近的超類的構造函數(shù)。在類層次結(jié)構中,如果超類構造函數(shù)需要參數(shù),那么不論子類它自己需不需要參數(shù),所有子類必須向上傳遞這些參數(shù)。,多級類層次,DemoShipment.java,super()必須是子類構造函數(shù)的第一個執(zhí)行語句,無論你用到了super()沒有,這個次序不變。如果super()沒有被用到,每個超類的默認的或無參數(shù)的構造函數(shù)將執(zhí)行。,何時調(diào)用構造函數(shù),CallingCons.java,第5章超類、子類和繼承性,成員變量的隱藏:在子類的創(chuàng)建中,如果出現(xiàn)了與其超類相同的成員變量,則超類中的成員變量被子類中的成員變量所隱藏。成員方法的覆蓋:在子類的創(chuàng)建中,如果出現(xiàn)與超類中有相同名、同參數(shù)及同返回類型的成員方法,則超類中的成員方法被子類中的成員方法所覆蓋。,類的繼承,TestCovert.java,方法覆蓋:在子類的創(chuàng)建中,具有與超類中有相同的方法名、相同的參數(shù)以及相同的返回數(shù)據(jù)類型。它還具有比超類中被覆蓋方法更大的可訪問性,即權限限制更寬松。publicprotected缺省private不同于方法過載。方法過載是在一個類中具有相同方法名的方法,它們之間有不同的參數(shù)。,方法覆蓋與運行時的多態(tài),運行時的多態(tài)超類的對象可以引用子類的實例(上轉(zhuǎn)型)該對象仍然只能夠調(diào)用超類中定義的方法和變量對于覆蓋或繼承的方法,Java運行時系統(tǒng)根據(jù)調(diào)用該方法的實例的類型來決定選擇哪個方法調(diào)用。對子類的一個實例,如果子類覆蓋了超類的方法,則運行時系統(tǒng)調(diào)用子類的方法。如果子類繼承了超類的方法(未覆蓋),則運行時系統(tǒng)調(diào)用超類的方法。,方法覆蓋與運行時的多態(tài),classClassAvoidcallMe()System.out.println(在ClassA中的callMe()方法!);classClassBextendsClassAvoidcallMe()System.out.println(在ClassB中的callMe()方法!);,方法覆蓋與運行時的多態(tài),publicclassTestConvertpublicstaticvoidmain(Stringarg)ClassAvA=newClassB();vA.callMe();程序運行輸出的是:在ClassB中的callMe()方法!結(jié)果說明了vA調(diào)用callMe()是子類ClassB中的方法。,方法覆蓋與運行時的多態(tài),當超類的對象對子類實例引用時,這個對象所訪問的成員必須是超類中所具有的。這個對象不能訪問子類自己創(chuàng)建的成員。當這個對象訪問的是被覆蓋的方法,則調(diào)用的是子類中覆蓋方法。只有當這個對象被強制轉(zhuǎn)換成子類類型時,這個子類的所有成員才有可能被訪問。,方法覆蓋與運行時的多態(tài),Dispatch.java,FindAreas.java,TestMethodHidden.java,TestMethodAndVar.java,第5章超類、子類和繼承性,final關鍵字“這個東西不能改變”考慮到兩方面的因素:設計或效率,final和abstract,final數(shù)據(jù)許多程序設計語言都有自己的辦法告訴編譯器某個數(shù)據(jù)是“常數(shù)”。常數(shù)主要應用于下述兩個方面:(1)編譯期常數(shù),它永遠不會改變(2)在運行期初始化的一個值,我們不希望它發(fā)生變化對于編譯期的常數(shù),編譯器(程序)可將常數(shù)值“封裝”到需要的計算過程里。也就是說,計算可在編譯期間提前執(zhí)行,從而節(jié)省運行時的一些開銷。,final和abstract,FinalData.java,空白final盡管被聲明成final,但卻未得到一個初始值。空白final必須在實際使用前得到正確的初始化??瞻譮inal具有最大的靈活性:位于類內(nèi)部的一個final字段現(xiàn)在對每個對象都可以有所不同,同時依然保持其“不變”的本質(zhì)。,final和abstract,BlankFinal.java,final參數(shù)將參數(shù)設成final屬性,方法是在參數(shù)列表中對它們進行適當?shù)穆暶鳌T谝粋€方法的內(nèi)部,不能改變該final參數(shù)。,final和abstract,FinalArguments.java,final類由final修飾的類稱終結(jié)類,不能被繼承。由于安全性的原因或者是面向?qū)ο笤O計的考慮,限定一些類不能被繼承。final類不能被繼承,保證了該類的唯一性。對于一個類的定義已經(jīng)很完善,不需再創(chuàng)建它的子類,也可以將其修飾為final類。格式:finalclassfinalClassName.,final和abstract,Jurassic.java,final方法以final修飾的方法是不能被子類的方法所覆蓋。其格式為:finalreturnTypemethodName(paraList).可有效地“關閉”動態(tài)綁定,或者告訴編譯器不需要進行動態(tài)綁定。編譯器就可為final方法調(diào)用生成效率更高的代碼。,final和abstract,abstract類和方法當一個類的定義完全表示抽象概念時,它不能夠被實例化為一個對象。抽象類本身存在未實現(xiàn)的方法(abstract方法),這些方法不具備實際功能,它只能衍生出子類,抽象方法則由衍生子類時所覆蓋。abstract方法必須是在abstract類中,但是abstract類中也可以有非abstract方法。,final和abstract,abstract類和方法abstract類格式:abstractclassabstractClassName.abstract方法格式為:abstractreturnTypemethodName(paraList);abstract方法是沒有語句實現(xiàn)部分,直接由;結(jié)束。abstract方法必須是在abstract類中,并由其子類的方法覆蓋。,final和abstract,在創(chuàng)建抽象方法時,要注意有下面三種方法不能作為抽象方法定義:構造方法類方法私有方法,final和abstract,TestAbst.java,AbstractAreas.java,第5章超類、子類和繼承性,Object類Object類處于Java開發(fā)環(huán)境的類層次樹的根部,處于Java類層的最高層的一個類,是所有類的超類。其它所有的類都直接或間接地為它的子類。該類定義了一些所有對象的最基本的狀態(tài)和行為,包括與同類對象相比較,轉(zhuǎn)化為字符串等,Object類,Java語言中類的繼承性有什么特點?子類可以繼承超類的什么,不能繼承的如何在子類中訪問?子類對超類的擴展表現(xiàn)在哪些方面?舉例說明。方法覆蓋是指什么,它與方法過載有什么不同?舉例說明。在Java中有哪些是多態(tài)性的表現(xiàn)?舉例說明。用final和abstract修飾的類各有什么特點?用final和abstract修飾的方法各有什么特點?舉例說明Object類的方法equals()的使用情況。,思考,有兩個類Person和Student,它們存在繼承關系。在Person中,有成員變量name,sex,age三個,它們類型分別為String、char、int,有一個帶參數(shù)的構造方法Person(String,char,int),用來對成員變量初始化。有成員方法setData(String,char,int)設置成員變量name,sex,age的值。getData()是不帶參數(shù)且返回值由name、sex和age值構成的字符串的成員方法。Student類是Person類的子類,在Student中,有int類型的sID和classNo成員變量用來表示學生的學號和班級號。它有帶五個參數(shù)的方法setData()和不帶參數(shù)的方法getData(),setData()方法設置成員變量的值
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)新驅(qū)動探索新型的醫(yī)療-社區(qū)-保險合作模式
- 是個再學習的過程工作總結(jié)模版
- 區(qū)塊鏈技術助力供應鏈金融的智能化升級
- 2025年小學數(shù)學聽課評課個人學習總結(jié)模版
- 區(qū)塊鏈和大數(shù)據(jù)在辦公自動化中的融合應用
- 醫(yī)療器械生產(chǎn)中的物料管理與質(zhì)量控制
- 區(qū)塊鏈技術助力實現(xiàn)腫瘤患者信息共享的透明化
- 上海模特經(jīng)紀合同范例
- 醫(yī)療信息化與醫(yī)院品牌形象的建設關系
- 2024年文教體育用品項目資金籌措計劃書代可行性研究報告
- 消防文職考試試題及答案
- 當代中國外交(外交學院)知到智慧樹章節(jié)測試課后答案2024年秋外交學院
- 小學科學湘科版六年級下冊全冊同步練習含答案
- 三年級下冊面積單位換算練習100道及答案
- 談院系兩級管理體制下實驗中心與教研室的關系
- 房屋建筑物構筑物檢查表
- 新時達系統(tǒng)故障排除經(jīng)驗分享
- 《春酒》ppt課件(24頁)
- 資產(chǎn)負債表模板
- 淺析汽車儀表板橫梁的焊接控制
- 中國油橄欖種植方案
評論
0/150
提交評論