




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第9講Java的繼承與多態(tài)(一)類的繼承子類的創(chuàng)建方法覆蓋目標理解繼承的概念掌握通過父類創(chuàng)建子類的方法理解子類和父類構造方法的執(zhí)行順序掌握實現方法覆蓋的方法面向對象特性概述繼承、封裝、多態(tài)是面向對象程序設計的3個重要特性。通過繼承,以既有類為基礎,派生出新類,達到代碼重用的目的;通過封裝,對類對象的數據成員進行訪問控制,起到數據保護的作用;通過多態(tài),程序能夠動態(tài)的匹配同名方法,使程序更加靈活。繼承的基本概念繼承是一種由已有的類創(chuàng)建新類的機制。利用繼承,可以先創(chuàng)建一個公有屬性的一般類,根據一般類再創(chuàng)建一個具有特殊屬性的新類。新類繼承一般類的狀態(tài)和行為,并根據需要增加它為自己的新的狀態(tài)和行為。由此繼承而得到的類為子類,被繼承的類為父類(超類)。JAVA不支持多繼承(子類只能有一個父類)。人學生教師教輔人員外語系學生計算機系學生旅游系學生計算機網絡專業(yè)學生軟件技術專業(yè)學生計算機多媒體專業(yè)學生計算機教育專業(yè)學生classPerson//定義Person類{ protectedStringname; protectedStringsex; protectedintage; ……Person類的方法}classStudentextendsPerson{ privateStringdepartment;//系別 privateStringspecialty;//專業(yè) ……Student類的方法}通過Person類派生出Student類。Student類繼承自Person類,擁有Person類的所有方法和屬性。通過關鍵字extends實現繼承//Ex6_1.javaclassPerson //定義Person類{ protectedStringname; //姓名 protectedStringsex; //性別 protectedintage; //年齡 publicvoidregister(Stringn,Strings,inta) //設置數據成員 { name=n; sex=s; age=a; } StringgetName()//獲取姓名 { returnname; } StringgetSex()//獲取性別 { returnsex; } intgetAge()//獲取年齡 { returnage; } publicvoidshowMe()//顯示人員信息 { System.out.println("姓名:"+name+",性別:"+sex+",年齡:"+age); }}Person類的定義classStudentextendsPerson{//定義Student類,是Person類的子類。privateStringdepartment;//系別 privateStringspecialty;//專業(yè) publicvoidstudentRegister(Stringn,Strings,inta,Stringdep,Stringspe){ //設置數據成員
register(n,s,a); department=dep; specialty=spe;} StringgetDepartment()//獲取學生所在系 { returndepartment; } StringgetSpecialty()//獲取學生所學專業(yè) { returnspecialty; }publicvoidshowStudent()//顯示學生類數據成員 { System.out.println("姓名:"+name+",性別:"+sex+",年齡:"+age+",系別:"+department+",專業(yè):"+specialty); }}通過extends關鍵字,由Person類派生出Student類publicclassEx6_1{ publicstaticvoidmain(Stringargs[]) { Studentstudent1=newStudent(); student1.studentRegister("張三","男",18,"計算機","軟件開發(fā)"); student1.showStudent(); }}運行結果:姓名:張三,性別:男,年齡:18,系別:計算機,專業(yè):軟件開發(fā)程序分析:本例中的Person類是父類,它派生出子類Student類。Student類繼承了Person類的name屬性,sex屬性,age屬性,GetName()方法,GetSex(),ShowMe()方法等。同時,Student類對Person類進行了功能擴展,又增加了department,specialty屬性和GetDepartment()、GetSpecialty()、ShowStudent()等方法。說明繼承能夠使子類擁有(繼承)父類的非私有屬性和方法(即可以繼承public、protected和默認訪問屬性的成員),而不需要在子類定義時重新定義父類中的這些同名屬性和方法。當修改父類中的某個屬性和方法時,子類中也會同樣得到修改。這樣,就可以省去重復定義成員的煩瑣,實現代碼重用,同時提高了代碼的可維護性。一個父類可以有多個子類,這些子類都是父類的特例,父類描述了這些子類的公共屬性和方法。一個子類可以繼承它的父類(或祖先類)中的屬性和方法,這些屬性和方法在子類中不必定義,子類中還可以定義自己的屬性和方法。創(chuàng)建子類的語法格式[訪問權限]class子類名extends父類名{類體定義;}“訪問權限”是指public,private,protected等;子類名和父類名通過關鍵字extends聯(lián)系在一起,形成繼承關系構造方法的繼承通常在定義一個新類的時候,會定義一個相應的構造方法,用來對數據成員進行一些初始化。構造方法是在創(chuàng)建對象時自動調用,并執(zhí)行構造方法的內容,構造方法不需從程序直接調用,而是在對象產生時自動執(zhí)行。構造方法沒有返回值,名稱必須與類的名稱相同之外。假如在一個類中定義了構造方法,而由這個類派生出來的子類也定義了構造方法,那生成新的子類對象的時候,構造方法是怎樣執(zhí)行的呢?//Ex6_2.javaclassPerson//定義Person類{ protectedStringname;//姓名 protectedStringsex;//性別 protectedintage;//年齡 publicPerson() { System.out.println("Person()constructoriscalled!"); } publicvoidregister(Stringn,Strings,inta)//設置數據成員 { name=n; sex=s; age=a; } publicvoidshowMe()//顯示人員信息 { System.out.println("姓名:"+name+",性別:"+sex+",年齡:"+age); }}Person類的構造方法,輸出了字符串“Person()constructoriscalled!”classStudentextendsPerson//定義Student類,是Person類的子類{ privateStringdepartment;//系別 privateStringspecialty;//專業(yè) publicStudent()//定義學生類的構造方法 { System.out.println("Student()constructoriscalled!");} publicvoidstudentRegister(Stringn,Strings,inta,Stringdep,Stringspe) { register(n,s,a); department=dep; specialty=spe; } publicvoidshowStudent()//顯示學生類數據成員 { System.out.println("姓名:"+name+",性別:"+sex+",年齡:"+age+",系別:"+department+",專業(yè):"+specialty); }}子類Student類的構造方法,用于輸出“Student()constructoriscalled!”publicclassEx6_2{publicstaticvoidmain(Stringargs[]){ Studentstudent1=newStudent(); student1.studentRegister("張三","男",18,"計算機","軟件開發(fā)"); student1.showStudent(); }}運行結果:Person()constructoriscalled!Student()constructoriscalled!姓名:張三,性別:男,年齡:18,系別:計算機,專業(yè):軟件開發(fā)Person類定義了一個無參構造方法,輸出“Person()constructoriscalled!”。通過Person類派生出了Student類,Student類中也定義了一個無參構造方法,將輸出“Student()constructoriscalled!”。通過輸出結果,明顯看出,創(chuàng)建Student對象時,在執(zhí)行Student類的構造方法之前,調用了Person類的構造方法。這樣的執(zhí)行順序可以保證子類對象從父類對象繼承得到的成員能夠進行正確的初始化。
覆蓋在Ex6_1.java中,Person類通過showMe()方法顯示人員信息,而子類Student類通過showStudent()方法顯示人員信息。這兩個方法都是用來顯示人員信息,只是顯示的項目不同而已。實際上,在定義Student類方法的時候,可以定義showMe()方法將父類的showMe()方法覆蓋。覆蓋是指在子類中,利用完全相同的方法名,返回類型和參數,重新實現父類的某一成員方法。當需要對象響應同樣的方法,但與超類中原來的方法有不同行為時,需要超越(抑制)該方法。用新的方法體取代原來的方法,但使用相同的方法名classPerson{//定義Person類protectedStringname; //姓名protectedStringsex; //性別protectedintage; //年齡publicPerson(){ } //構造方法publicPerson(Stringn,Strings,inta){ name=n; sex=s; age=a;}publicvoidshowMe(){ //顯示人員信息 System.out.println("姓名:"+name+",性別:"+sex+",年齡:"+age);}}父類Person中定義了showMe()方法,用來輸入類對象基本信息覆蓋示例classStudentextendsPerson{//定義Person的子類:StudentprivateStringdepartment;//系別privateStringspecialty;//專業(yè)publicStudent(Stringn,Strings,inta,Stringdep,Stringspe){ name=n; sex=s; age=a; department=dep; specialty=spe;}publicvoidshowMe(){//顯示學生類數據成員 System.out.println("姓名:"+name+",性別:"+sex+",年齡:"+age+",系別:"+department+",專業(yè):"+spe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省陽江市高新區(qū)2024-2025學年高一上學期1月期末地理試題 含解析
- 家電行業(yè)智能家電互聯(lián)互通方案
- 企業(yè)采購原材料采購協(xié)議
- 水電站建設運營合作協(xié)議
- 旅游行業(yè)服務質量保障協(xié)議
- 網絡科技行業(yè)數據安全使用承諾書
- 企業(yè)員工福利計劃與服務支持方案
- 私人教練健身訓練合同協(xié)議
- 產品銷售代理合同集
- 汽車維修與故障診斷技術知識點總結題集
- 電梯日常維護保養(yǎng)流程與技巧培訓
- JJF 2210-2025取水計量數據質量控制技術規(guī)范
- 商業(yè)綜合體物業(yè)管理目標及實施措施
- 環(huán)保局“十三五”規(guī)劃中期評估報告
- (一模)日照市2022級(2025屆)高三校際聯(lián)合考試歷史試卷
- 數學口算乘除法練習題1000道隨時打印
- 2024浙江寧波朗辰新能源有限公司招聘3人筆試參考題庫附帶答案詳解
- 第22課《陳涉世家》課件(共71張)
- _重大事故后果分析(精)
- 第7章 吸附課件
- JGJ_T231-2021建筑施工承插型盤扣式鋼管腳手架安全技術標準(高清-最新版)
評論
0/150
提交評論