版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第10講Java的繼承與多態(tài)(二)方法覆蓋super&this關(guān)鍵字final關(guān)鍵字Object類多態(tài)的定義與作用構(gòu)造方法的重載/教學(xué)目標掌握實現(xiàn)方法覆蓋的方法掌握super、this關(guān)鍵字的意義及使用方法掌握final關(guān)鍵字的意義及使用方法理解Object類的作用及其常用方法了解多態(tài)的意義掌握重載的使用方法super關(guān)鍵字的使用在Java的覆蓋機制中,子類中的同名成員變量或方法隱藏了超類的成員變量或方法,如果在子類中,希望使用父類中的那些被子類覆蓋的成員或方法,就需要借助于super這個關(guān)鍵字。另外,若在子類中調(diào)用父類的構(gòu)造方法,也需要利用super實現(xiàn)。super使用方法如下:super.成員變量名稱
//使用父類的成員變量super.方法名稱(參數(shù)列表)//使用父類的方法this關(guān)鍵字的使用this使用方法如下:this.成員變量名稱
//使用自身成員變量this.方法名稱(參數(shù)列表)//使用當前類的方法super——用來表示直接父類。this——訪問當前對象。當在一個類中要明確指出使用當前對象本身的變量或方法時,就可以使用this關(guān)鍵字代表當前類。this的另一個用途是調(diào)用當前對象的另一個構(gòu)造方法。假如一個類中定義了幾個構(gòu)造方法,可以使用this關(guān)鍵字引用當前類中定義的其他構(gòu)造方法。classPerson{ //定義Person類
protectedStringname;//姓名
protectedStringsex;//性別
protectedintage;//年齡
publicvoidregister(Stringn,Strings,inta){ //設(shè)置數(shù)據(jù)成員
name=n; sex=s; age=a;}publicvoidshowMe(){ //顯示人員信息
System.out.println("姓名:"+name+",性別:"+sex+",年齡:"+age);}}類Person中定義了3個成員和2個方法register()和showMe()。在方法showMe()中,可以使用來替換name,this代表Person類對象本身。super&this示例classStudentextendsPerson{privateStringdepartment; //系別
privateStringspecialty; //專業(yè)
publicvoidstudentRegister(Stringn,Strings,inta,Stringdep,Stringspe){ super.register(n,s,a); //調(diào)用父類方法
this.department=dep; //訪問自身成員變量
this.specialty=spe; //訪問自身成員變量
}publicvoidshowStudent(){ //顯示學(xué)生類數(shù)據(jù)成員
System.out.println("姓名:"++",性別:"+super.sex+",年齡:"+super.age+",系別:"+this.department+",專業(yè):"+this.specialty);}}方法studentRegister()中,使用super表示父類對象,super.register()即調(diào)用了父類對象方法register();使用this表示當前類對象,this.department即引用了當前類對象成員department。super&this示例(續(xù))publicclassEx6_4{publicstaticvoidmain(Stringargs[]){Studentstudent1=newStudent();student1.studentRegister("張三","男",18,"計算機","軟件開發(fā)");student1.showStudent(); }}運行結(jié)果:姓名:王蘭,性別:女,年齡:16姓名:張三,性別:男,年齡:18,系別:計算機,專業(yè):軟件開發(fā)程序分析:Student類中使用super.register()的方式訪問父類中定義的register()方法,而訪問本身的數(shù)據(jù)成員,則通過this關(guān)鍵字實現(xiàn)。通常,this關(guān)鍵字可以省略。使用super除了可以訪問父類的普通方法外,還可以訪問父類的構(gòu)造方法。super&this示例(續(xù))classPerson{protectedStringname;//姓名
protectedStringsex;//性別
protectedintage;//年齡
publicPerson(){ }//無參構(gòu)造方法
publicPerson(Stringn,Strings,inta){//構(gòu)造方法
name=n; sex=s; age=a;}publicvoidshowMe(){ //顯示人員信息
System.out.println("姓名:"+name+",性別:"+sex+",年齡:"+age);}}Person類中定義了2個構(gòu)造方法,這是方法的重載。程序在調(diào)用時會根據(jù)實參的個數(shù)自動匹配相應(yīng)的構(gòu)造方法。super示例classStudentextendsPerson{privateStringdepartment; //系別
privateStringspecialty; //專業(yè)
publicStudent(Stringn,Strings,inta,Stringdep,String
spe){ super(n,s,a); //調(diào)用了父類的構(gòu)造方法
department=dep; specialty=spe;}publicvoidshowMe(){//顯示學(xué)生類數(shù)據(jù)成員
System.out.println("姓名:"+name+",性別:"+sex+",年齡:"+age+",系別:"+department+",專業(yè):"+specialty);}}在Student類的構(gòu)造方法中,使用super(n,s,a)調(diào)用了父類構(gòu)造方法。由于super(n,s,a)有3個實參,程序匹配Person類中定義的構(gòu)造方法Person(Stringn,Strings,inta)super示例(續(xù))publicclassEx6_5{publicstaticvoidmain(Stringargs[]){ Personperson1=newPerson("王蘭","女",16); person1.showMe(); Studentstudent1=newStudent("張三","男",18,"計算機","軟件開發(fā)"); student1.showMe(); }}運行結(jié)果:姓名:王蘭,性別:女,年齡:16姓名:張三,性別:男,年齡:18,系別:計算機,專業(yè):軟件開發(fā)程序分析:定義Student類的構(gòu)造方法時,使用了super()方法訪問了父類的構(gòu)造方法,對相應(yīng)的數(shù)據(jù)成員進行了初始化操作super示例(續(xù))final關(guān)鍵字的使用覆蓋(overriding)固然有其便利性,但在設(shè)計類時,如果基于某些因素,父類的方法不希望子類的方法來覆蓋它,便可在父類的方法之前加上“final”關(guān)鍵字,如此該方法便不會被覆蓋。finalclassStudentextendsPerson{……}classStudentOfComputerextendsStudent{privateStringgrade; //年級}編譯這個文件,編譯器報錯:cannotinheritfromfinalStudent。因為Student為final類,所以它拒絕StudentOfComputer繼承Student。Object類Object類抽象了所有類共有的一些屬性和方法,它是一切類的父類,所有的類均直接或間接繼承它,是類之源。所以,Person類的父類是Object類。
Object類Person類Student類Object類的方法方法主要功能toString()以String類對象的形式返回當前對象的字符串描述equals()通過參數(shù)帶入一個對象,并將它與當前對象進行比較,測試的是兩個對象是否相等getClass()
返回一個Class類對象,該對象內(nèi)部包含了一些能夠標識當前對象的信息hashCode()計算一個對象的哈希碼,并將其返回notify()喚醒一個與當前對象關(guān)聯(lián)的線程notifyAll()喚醒與當前對象關(guān)聯(lián)的所有線程wait()使線程等待一個指定的時間間隔或等待另一個線程調(diào)用當前對象的notify()或notifyAll()方法getClass()方法的使用getClass()方法返回一個Class類對象,該對象內(nèi)部包含了一些能夠標識當前對象的信息。如果想知道某個對象obj是屬于哪個類時,可用obj.getClass()來查詢classA{privateintnum;publicA(inta){num=a;}}publicclassEx6_7{publicstaticvoidmain(Stringargs[]){Aa=newA(1); //創(chuàng)建A類的對象aClassca=a.getClass();//用對象a調(diào)用getClass()方法
System.out.println("classofobj="+ca);}}運行結(jié)果:classofobj=ClassA程序的輸出顯示,類對象a屬于類A。輸出中含字符串"Class",代表A是一個類。equals()方法的使用classA{privateintnum;publicA(inta){ num=a;} }publicclassEx6_8{publicstaticvoidmain(Stringargs[]){ Aa=newA(1); Ab=newA(5); Ac=a;//聲明類變量c,讓它指向a所指向的對象
Booleanbr1=a.equals(b);//測試a與b是否指向同一對象
Booleanbr2=a.equals(c);//測試a與c是否指向同一對象
System.out.println("a.equals(b)="+br1);
System.out.println("a.equals(c)="+br2);} }equals()方法通過參數(shù)帶入一個對象,將它與當前對象進行比較,測試兩個對象是否相等。如果是,則返回true,否則返回false。運行結(jié)果:a.equals(b)=falsea.equals(c)=truetoString()方法的使用toString()方法的功能是將對象的內(nèi)容轉(zhuǎn)換成字符串,并返回其內(nèi)容。例如,若變量a是指向由類A所創(chuàng)建的對象時,則下面的語句會調(diào)用toString()方法,并輸出所指向?qū)ο蟮膬?nèi)容:
Aa=newA(2);
System.out.println(a);
上面的語句是以類類型的變量a當成println()的參數(shù),此時,Java會先通過變量a調(diào)用toString()方法,再把結(jié)果當成println()的參數(shù)。也可以用下面的語法來便編寫相同功能,且容易理解的語句: System.out.println(a.toString());運行結(jié)果:A@6b97fdclassA{privateintnum;publicA(inta){ num=a;}publicStringtoString(){//覆蓋toString()方法
Stringstr="toString()called,num="+num; returnstr;} }publicclassEx6_10{ publicstaticvoidmain(Stringargs[]){ a=newA(2);
System.out.println(a.toString());} }運行結(jié)果:toString()called,num=2覆蓋Object類的toString()方法重載
所謂的“重載”是指相同的方法名稱,若參數(shù)個數(shù)不同,或參數(shù)個數(shù)相同、類型不同的話,方法便具有不同的功能。重載是多態(tài)技術(shù)的一種。運用方法重載需要注意的是,可以定義名稱相同,但參數(shù)不同的方法;但不可以定義名稱相同,而且參數(shù)也完全一致的方法。例如,下面的程序代碼有誤。publicvoidsetPerson(intage);publicint
setPerson(intage);其原因是,一旦調(diào)用了setPerson()方法,程序無法判斷是哪一個方法被調(diào)用。事實上,若嘗試編譯這樣的類,編譯器也會出現(xiàn)錯誤信息。多態(tài)的定義與作用
多態(tài)是在類體系中把設(shè)想(想要“做什么”)和實現(xiàn)(該“怎么做”)分開的手段,它是從設(shè)計的角度考慮的。多態(tài)性意味著某種概括的動作可以由特定的方式來實現(xiàn),這種特定的方式取決于執(zhí)行該動作的對象。如果從面向?qū)ο蟮恼Z義角度來看,可以簡單理解為多態(tài)就是“相同的表達式,不同的操作”,也可以說成“相同的命令,不同的操作”。多態(tài)有兩種情況,一種是覆蓋技術(shù),另外就是重載技術(shù)。覆蓋是在子類中直接定義和父類同樣的屬性和方法,但重新編寫了方法體,即子類與父類方法的形參與返回值都相同,而內(nèi)部處理不同,這種方法在使用過程中,Java虛擬機會根據(jù)調(diào)用這個方法的類來確定哪個方法被調(diào)用。classPerson{//定義Person類protectedStringname;//姓名protectedStringsex;//性別protectedintage;//年齡
publicvoidregister(Stringn,Strings){//設(shè)置姓名和性別 name=n; sex=s;}publicvoidregister(inta){
age=a;}//設(shè)置年齡
publicvoidregister(Stringn,Strings,inta){//設(shè)置數(shù)據(jù)成員
name=n; sex=s; age=a;}publicvoidshowMe(){//顯示人員信息
System.out.println("姓名:"+name+",性別:"+sex+",年齡:"+age);} }定義了3個register()方法,3個方法具有不同的參數(shù)列表。多態(tài)示例publicclassEx6_11{publicstaticvoidmain(Stringargs[]){ Personp1=newPerson(); Personp2=newPerson(); p1.register("張三","男",18);
p2.register("李欣","女"); p2.register(17); p1.showMe(); p2.showMe();} }運行結(jié)果:姓名:張三,性別:男,年齡:18姓名:李欣,性別:女,年齡:17根據(jù)實參的不同,自動匹配調(diào)用相應(yīng)的方法多態(tài)示例(續(xù))構(gòu)造方法的重載
在Java中,不僅方法可以重載,構(gòu)造方法也可以重載。同普通方法的重載,可以在一個類中定義幾個構(gòu)造方法,只要構(gòu)造方法的參數(shù)列表不同即可。
classPerson{protectedStringname;protectedStringsex;protectedintage;
publicPerson(){//沒有參數(shù)的構(gòu)造方法
System.out.println("Person()constructoriscalled!");}構(gòu)造方法重載示例
publicPerson(StringPName,String
PSex){//有兩個變量
name=PName;sex=PSex;
System.out.println("Person(String,String)constructoriscalled!");
System.out.println("姓名:"+name+""+"性
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024知名大學(xué)與科研機構(gòu)聯(lián)合培養(yǎng)研究生協(xié)議
- 2025年度企業(yè)財務(wù)內(nèi)部控制與合規(guī)審計合同范本3篇
- 專用購銷交易2024版協(xié)議格式版A版
- 二零二四商標授權(quán)及知識產(chǎn)權(quán)跨界合作合同3篇
- 萬科物業(yè)2024停車場運營管理協(xié)議
- 2024年談蕾離婚后財產(chǎn)與子女撫養(yǎng)協(xié)議書3篇
- 個性化小額資金借貸款項協(xié)議范本一
- 二零二四衛(wèi)生院衛(wèi)生間改造與裝修施工合同3篇
- 2025產(chǎn)學(xué)研科技成果轉(zhuǎn)化合同:生物科技產(chǎn)業(yè)合作框架4篇
- 2024路燈購銷安裝合同范本
- SQL Server 2000在醫(yī)院收費審計的運用
- 《FANUC-Oi數(shù)控銑床加工中心編程技巧與實例》教學(xué)課件(全)
- 微信小程序運營方案課件
- 抖音品牌視覺識別手冊
- 陳皮水溶性總生物堿的升血壓作用量-效關(guān)系及藥動學(xué)研究
- 安全施工專項方案報審表
- 學(xué)習(xí)解讀2022年新制定的《市場主體登記管理條例實施細則》PPT匯報演示
- 好氧廢水系統(tǒng)調(diào)試、驗收、運行、維護手冊
- 中石化ERP系統(tǒng)操作手冊
- 五年級上冊口算+脫式計算+豎式計算+方程
- 氣體管道安全管理規(guī)程
評論
0/150
提交評論