




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第五章第五章 類的繼承和派生類的繼承和派生Inheritance/extends/derive教學(xué)目標(biāo)教學(xué)目標(biāo)n理解繼承的概念和作用n派生類的定義n理解訪問修飾符protectedn方法的重寫n繼承下的構(gòu)造函數(shù)的使用n繼承下的finalize方法的使用n理解超類和子類的關(guān)系5.1 繼承的概念和軟件的重用性繼承的概念和軟件的重用性n繼承是從已有的類中派生出新的類。n新的類能吸收已有類的數(shù)據(jù)屬性和行為;n并能擴(kuò)展新的能力。n類和類之間的繼承關(guān)系可以用UML符號(hào)表示如圖5-1,n父類又叫超類或基類,n子類又叫派生類。n父類是子類的一般化,子類是父類的特化(具體化)。超類或基類父類子類派生類圖5-1
2、繼承關(guān)系super/base/parentchild/derived5.1 繼承的概念和軟件的重用性繼承的概念和軟件的重用性n如表5-1所示,列出了幾個(gè)超類和子類的實(shí)際例子。超類或基類父類子類派生類圖5-1 繼承關(guān)系超 類子 類學(xué)生研究生、本科生、小學(xué)生形狀三角形、圓、矩形雇員教師、醫(yī)生、職員交通工具轎車、卡車、公交車水果蘋果、梨、桃、桔表表5-1 繼承例子繼承例子n“is-a” 關(guān)系: 是類之間的繼承關(guān)系。 子類的對(duì)象可當(dāng)作超類對(duì)象子類的對(duì)象可當(dāng)作超類對(duì)象。但反過來,不能把超類對(duì)象可當(dāng)作子類對(duì)象。 例如,轎車可看成是交通工具,但不能把交通工具看成就是轎車。n“has-a”關(guān)系:代表類之間的組
3、合(參見4.9節(jié))。在“has-a”關(guān)系中一個(gè)對(duì)象包含一個(gè)或多個(gè)其他對(duì)象的引用成員。 如,轎車由方向盤、輪子、發(fā)動(dòng)機(jī)等組成。5.1 繼承的概念和軟件的重用性(續(xù))繼承的概念和軟件的重用性(續(xù)) n繼承分為單繼承和多繼承。n單繼承是指一個(gè)子類最多只能有一個(gè)父類。n多繼承是一個(gè)子類可有二個(gè)以上的父類。由于多繼承會(huì)帶來二義性,在實(shí)際應(yīng)用中應(yīng)盡量使用單繼承。nJava類只支持單繼承,而接口支持多繼承。類只支持單繼承,而接口支持多繼承。5.1 繼承的概念和軟件的重用性(續(xù))繼承的概念和軟件的重用性(續(xù)) objectWinDialogWin單繼承,in javaClass 1Class 4Class 2
4、Class 3多繼承多繼承,in C+單繼承與多繼承例子單繼承與多繼承例子5.1 繼承的概念和軟件的重用性(續(xù))繼承的概念和軟件的重用性(續(xù))n繼承使軟件的代碼得到重用。n在繼承關(guān)系中,n子類通過吸收已有類的數(shù)據(jù)(屬性)和方法(行為)n并增加新功能或修改已有功能來創(chuàng)建新類。n軟件的重用性不僅節(jié)省了程序的開發(fā)時(shí)間,還促進(jìn)了經(jīng)過驗(yàn)證和調(diào)試的高質(zhì)量軟件的重用,這增加實(shí)現(xiàn)系統(tǒng)的效率。n在java中,Object類定義和實(shí)現(xiàn)了Java系統(tǒng)所需要的眾多類的共同行為,它是所有類的根類,所有的類都是由這個(gè)類繼承、擴(kuò)充而來的。5.2 派生類的定義派生類的定義n派生類定義的一般格式為: 類修飾符 class 子類
5、名 extends 父類名 成員變量定義; 成員方法定義;派生類的定義中,用關(guān)鍵字extends來明確指出它所繼承的超類。n例5-1 通過繼承來定義派生類5.2 派生類的定義(續(xù))派生類的定義(續(xù))class Automobileint Number;void setNumber(int Num)Number=Num;void showNumber()System.out.println(Automobile number:+Number); 超類5.2 派生類的定義(續(xù))派生類的定義(續(xù))class Truck extends Automobileint capacity;void setC
6、apacity(int truckCapacity)capacity=truckCapacity;void showCapacity()System.out.println(Truck Capacity:+capacity); 派生類5.2 派生類的定義(續(xù))派生類的定義(續(xù))class AutomobileExtendspublic static void main(String args)Truck tc=new Truck();tc.setNumber(8888); tc.setCapacity(10);tc.showNumber();tc.showCapacity();該程序運(yùn)行的結(jié)果
7、為: Automobile number:8888Truck Capacity:10 派生類使用從超類中繼承的方法setNumber派生類使用從超類中繼承的方法showNumber5.3 作用域和繼承作用域和繼承n第4章討論了成員訪問控制修飾符:public、private、package和protected。n超類public的成員可以在超類中使用,也可以在子類使用,程序可以在任何地方訪問public超類成員。n超類的private成員僅在超類中使用,在子類中不能被訪問。n超類protected成員,可在子類和同一包內(nèi)其他類被訪問。n超類package成員,可在同一包內(nèi)其他類被訪問。n子類從
8、超類中繼承成員時(shí),超類的所有public和protected成員在子類中,都保持它們?cè)械脑L問修飾符。5.4方法的重新定義方法的重新定義(overriding)n如果在子類中定義的某個(gè)方法與父類的某個(gè)方法有相同方法署名(方法頭),則稱子類重新定義(overriding)了父類的該方法,或稱重寫或覆蓋。n子類的對(duì)象調(diào)用這個(gè)方法時(shí),將使用子類中定義的方法,對(duì)它而言,父類中定義的方法就“看不見”了。n如要在子類的方法中要使用超類的這個(gè)被重寫的方法,用:super.超類同名方法()。n例5-2 方法的重寫 Point類的設(shè)計(jì)類的設(shè)計(jì): 成員變量成員變量:int x,y 成員方法成員方法:setX(in
9、t ),getX(),setY(int),getY(),toString(); Point() , Point(int xValue,int yValue)Circle類的設(shè)計(jì)類的設(shè)計(jì): 成員變量成員變量:x,y/繼承自Point類 radius 成員方法成員方法:setX(),getX () ,setY () ,getY () /繼承自Point類set Radius () ,getRadius () ,getDiameter () , getCircumference () toString() /重寫父類同名方法 getArea() Circle (), Circle ( int xVa
10、lue, int yValue, double radiusValue )5.4方法的重新定義方法的重新定義(overriding)(續(xù))續(xù))nPoint.java文件的部分代碼: public String toString() return + x + , + y + ; nCircle.java文件的部分代碼: public String toString() return Center = +super.toString()+ Radius = + radius; 重寫了超類Point類中的toString方法通過super調(diào)用超類中的被重寫的toString方法5.5繼承下的構(gòu)造函數(shù)
11、和繼承下的構(gòu)造函數(shù)和finalize方法方法n繼承下的構(gòu)造函數(shù)的調(diào)用次序:繼承下的構(gòu)造函數(shù)的調(diào)用次序:子類對(duì)象的實(shí)例化過程開始于一系列的構(gòu)造函數(shù)調(diào)用,n子類構(gòu)造函數(shù)在執(zhí)行自己的任務(wù)之前,將顯式地(通過super引用)或隱式地(調(diào)用超類的默認(rèn)構(gòu)造函數(shù)或無參數(shù)構(gòu)造函數(shù))調(diào)用其直接超類的構(gòu)造函數(shù)。類似地,如果超類派生于另一個(gè)類,則要求超類的構(gòu)造函數(shù)調(diào)用層次結(jié)構(gòu)中上一級(jí)類的構(gòu)造函數(shù),依此類推。在調(diào)用請(qǐng)求中,最先調(diào)用的構(gòu)造函數(shù)總是Object類的構(gòu)造函數(shù)。最后才會(huì)執(zhí)行原有的子類構(gòu)造函數(shù)。n繼承下的finalize方法的調(diào)用次序n類層次結(jié)構(gòu)中子類finalize方法調(diào)用應(yīng)先于超類的finalize方法,直
12、至最后調(diào)用Object超類的finalize方法。 nfinalize方法的定義格式: void finalize()例5-3 繼承下的構(gòu)造函數(shù)和finalize方法5.6 超類和子類的關(guān)系(一)超類和子類的關(guān)系(一) 再次使用點(diǎn)圓繼承層次來討論超類與子類的關(guān)系。 為了使圓類繼承點(diǎn)類并能訪問點(diǎn)類中的成員變量,可將點(diǎn)類中的x和y定義成protected的成員. 例5-4中,Circle2類通過繼承Point2類,就可以在Circle2類中訪問它的超類(Point2類)的protected和public成員了。例5-4 使用protected數(shù)據(jù)的點(diǎn)-圓層次5.6 超類和子類的關(guān)系(二)超類和子類
13、的關(guān)系(二)n但在使用但在使用protectedprotected成員變量時(shí),會(huì)產(chǎn)生兩個(gè)問題成員變量時(shí),會(huì)產(chǎn)生兩個(gè)問題: :n子類可將非法值賦給變量,導(dǎo)致該變量處于非法狀態(tài)。子類可將非法值賦給變量,導(dǎo)致該變量處于非法狀態(tài)。 例如,如果將Circle2的成員變量radius聲明為protected,則它的子類就能夠?qū)⒇?fù)值賦給radius變量。n編寫的子類編寫的子類Circle2Circle2方法更依賴于超類方法更依賴于超類Point2Point2實(shí)現(xiàn)。實(shí)現(xiàn)。 例如,如果由于某種原因?qū)⒊蓡T變量x和y的名稱改為xCoordinate和yCoordinate,則子類直接引用這些超類成員變量的所有地方都
14、必須進(jìn)行相應(yīng)地修改。n為了使子類應(yīng)依賴于為了使子類應(yīng)依賴于超類服務(wù)超類服務(wù),而不應(yīng)依賴于,而不應(yīng)依賴于超類實(shí)現(xiàn)超類實(shí)現(xiàn): :n把超類中的成員變量聲明為private,并在超類中定義訪問這些private成員變量的public型的方法, 例5-5 把超類中的成員變量聲明為private, 在子類中使用從超類中繼承過來的方法對(duì)這些私有成員變量進(jìn)行訪問。/Point3.javapublic class Point2 private int x; private int y; public void setX( int xValue ) x = xValue; public int getX() re
15、turn x; public void setY( int yValue ) y = yValue; public int getY() return y; /Circle3.javapublic class Circle3 extends Point3 private double radius; public Circle3() /隱式調(diào)用超類的無參構(gòu)造方法 public Circle3( int xValue, int yValue, double radiusValue ) super( xValue, yValue ); /顯式調(diào)用超類的構(gòu)造方法 setRadius( radiusV
16、alue ); . public String toString() /調(diào)用超類的toString方法 return Center = + super.toString() + ; Radius = + getRadius(); 5.7 繼承的程序設(shè)計(jì)舉例(一)繼承的程序設(shè)計(jì)舉例(一)下面讓我們來看一個(gè)具有3級(jí)繼承層次的例子。這3級(jí)為點(diǎn)圓圓柱體。它們之間的繼承關(guān)系如圖5-3所示。例5-6 繼承的程序設(shè)計(jì)舉例圖5-3三級(jí)繼承層次Point類的設(shè)計(jì)類的設(shè)計(jì): 成員變量:int x,y 成員方法:setX,getX,setY,getY,toString. Point() , Point(int xV
17、alue,int yValue) Circle類的設(shè)計(jì)類的設(shè)計(jì): 成員變量: double radius 成員方法: setRadius,getRadius,getDiameter, getCircumference,getArea ,toString Circle( ), Circle(int xValue,int yValue, double radiusValue)Clinder類的設(shè)計(jì)類的設(shè)計(jì): 成員變量: double hight成員方法: setHight ,getHight , getArea, toString Cylinder( int xValue, int yValue, double radiusValue,double heightValue )小結(jié)小結(jié)n繼承作用:在原有類的基礎(chǔ)上派
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)習(xí)2025年創(chuàng)業(yè)扶持政策與市場趨勢的結(jié)合試題及答案
- 教育精準(zhǔn)扶貧項(xiàng)目實(shí)施與農(nóng)村教育人才引進(jìn)報(bào)告
- 水禽水神測試題及答案
- 航空貨運(yùn)企業(yè)市場營銷策略創(chuàng)新與市場拓展實(shí)踐:2025年市場格局與發(fā)展策略報(bào)告
- 管理通史測試題及答案
- 水文統(tǒng)計(jì)學(xué)試題及答案
- 商丘師范學(xué)院《專題設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 安全文明 的試題及答案
- 寧夏銀川市金鳳區(qū)六盤山高級(jí)中學(xué)2025屆高三第三次調(diào)研測試物理試題試卷含解析
- 葡萄酒行業(yè)產(chǎn)區(qū)特色品牌打造:2025年國際化發(fā)展路徑報(bào)告
- 研發(fā)成果商業(yè)化轉(zhuǎn)化(資料)
- 高速鐵路關(guān)鍵技術(shù)
- 丁麗娟《數(shù)值計(jì)算方法》五章課后實(shí)驗(yàn)題答案(源程序很詳細(xì)-且運(yùn)行無誤)
- 情境學(xué)習(xí)理論在教育中的應(yīng)用
- 血糖監(jiān)測操作流程及考核標(biāo)準(zhǔn)(100分)
- 部編版語文二年級(jí)下冊(cè)第6單元奇妙的大自然大單元整體作業(yè)設(shè)計(jì)
- 2023年住院醫(yī)師考試-康復(fù)醫(yī)學(xué)住院醫(yī)師考試題庫(含答案)
- 高中音樂鑒賞 《黃河大合唱》
- 2022年貴州貴陽市中考英語真題
- FZ/T 32001-2018亞麻紗
- 《大數(shù)據(jù)環(huán)境下的網(wǎng)絡(luò)安全問題探討(論文)8000字》
評(píng)論
0/150
提交評(píng)論