版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
§4-1不同類別學(xué)生信息的管理Java面向?qū)ο蟪绦蛟O(shè)計教學(xué)目標(biāo)任務(wù)分析
說到學(xué)生大家肯定都不陌生,在每個人的腦海中定都會呈現(xiàn)出不同的學(xué)生形象。那么如何對學(xué)生下一個定義呢?百度百科中是這樣描述的:“學(xué)生,也叫學(xué)子;一般指正在學(xué)校、學(xué)堂或其他學(xué)習(xí)地方受教育的人,而在研究機構(gòu)或工作單位(如醫(yī)院、研究所)學(xué)習(xí)的人也稱學(xué)生,根據(jù)學(xué)習(xí)的不同階段,可以把學(xué)生分為:幼兒園學(xué)生、小學(xué)生、中學(xué)生、高等院校學(xué)生(大學(xué)生、碩士研究生、博士研究生)等等?!庇纱丝梢姟霸趯W(xué)校接受學(xué)習(xí)教育”是學(xué)生的共性,小學(xué)生、中學(xué)生、大學(xué)生又各有不同的特點。我們?nèi)绾瓮ㄟ^Java程序來描述學(xué)生這一群體呢?
通過本單元Java繼承相關(guān)知識的學(xué)習(xí),就可以非常高效地解決此問題。教學(xué)內(nèi)容1Java繼承的實現(xiàn)Java中的繼承23繼承與構(gòu)造方法成員的隱藏與覆蓋45super和final關(guān)鍵字一、Java中的繼承繼承是面向?qū)ο蟪绦蛟O(shè)計中最為關(guān)鍵的概念及編程技術(shù)。類的繼承也稱為類的派生,一個新類可以從另一個已存在的類中派生,這個過程便稱為類的繼承。派生出的新類稱為已有類的子類(Subclass)或派生類(Derivedclass),已有類稱為基類(Baseclass)、父類(Parentclass)或超類(Superclass)。類的繼承性很好地解決了軟件的代碼重用性問題。通過繼承,一個類可以擁有已有類的功能。即子類不但可以繼承父類的行為和屬性,它還可以根據(jù)需要增加自己的行為和屬性。Java只支持單重繼承,所以Java程序中的類層次結(jié)構(gòu)是樹狀結(jié)構(gòu)。什么是繼承一、Java中的繼承【例4-1】類繼承程序示例。classVehicle{
publicvoidstart(){
System.out.println(“Starting...”);}}classCarextendsVehicle{publicvoiddrive(){
System.out.println(“Driveing...”);}}publicclassTestVehicle{publicstaticvoidmain(string[],args){
System.out.println(“Createingacar...”);Carc=newCar();c.start();c.drive();}}二、Java繼承的實現(xiàn)Java中的繼承是通過在類聲明中加入extends關(guān)鍵字來實現(xiàn)的。其一般格式如下:
[類修飾符]class子類名extends父類名{
//子類類體
}例如:
classCarextendsVehicle二、Java繼承的實現(xiàn)1)子類可以繼承父類中所有非私有的變量成員和方法成員。2)子類不能繼承父類的構(gòu)造方法,因為父類構(gòu)造方法創(chuàng)建的是父類對象,子類必須聲明自己的構(gòu)造方法,用于創(chuàng)建子類自己的對象。但在子類構(gòu)造方法中可以(顯式或隱式地)調(diào)用父類的構(gòu)造方法。3)子類可以聲明自己的變量成員和方法成員。如果子類聲明了與父類同名的成員,則不能繼承父類的成員,此時子類成員覆蓋(或隱藏)了父類的成員。4)子類不能刪除父類成員。5)子類對象對父類對象的訪問權(quán)限遵循表3-1中的訪問權(quán)限規(guī)定。6)extends關(guān)鍵字后即為父類的名字。其實這個父類也可以是另一個類的子類,所以父類、子類是相對的。Java繼承遵循的規(guī)則二、Java繼承的實現(xiàn)【例4-2】子類的創(chuàng)建與實現(xiàn)示例1。//創(chuàng)建父類AclassA{inti,j;voidshowij(){
System.out.println("iandj:"+i+""+j);}}//創(chuàng)建類A的子類BclassBextendsA{intk;//k是子類B加入的成員變量.voidshowk(){System.out.println("k:"+k);}voidsum(){
System.out.println("i+j+k:"+(i+j+k));}}classExample{publicstaticvoidmain(Stringargs[]){AsuperObj=newA();BsubObj=newB();//父類的對象可以使用自己的成員變量.superObj.i=10;superObj.j=20;System.out.println("父類可用的成員變量有:");superObj.showij();System.out.println();//子類可以引用父類的非private成員變量及子類自己的成員變量subObj.i=7;subObj.j=8;subObj.k=9;System.out.println("子類可用的成員變量有:");subObj.showij();subObj.showk();System.out.println();System.out.println("子類中成員變量的和為:");subObj.sum();}}二、Java繼承的實現(xiàn)【例4-3】子類的創(chuàng)建與實現(xiàn)示例2。//創(chuàng)建父類A.classA{inti;//默認(rèn)權(quán)限的成員變量.privateintj;//只限于A使用的局部成員變量.
publicvoidsetij(intx,inty){i=x;j=y;}publicintgetj(){
returnj;
}}//創(chuàng)建類A的子類B.classBextendsA{inttotal;voidsum(){
total=i+j;
//語法錯誤。子類B無權(quán)訪問A類中的用private成員j.
total=i+getj();//允許}}classAccess{publicstaticvoidmain(Stringargs[]){BsubOb=newB();subOb.setij(10,12);subOb.sum();System.out.println("Totalis"+subOb.total);}}說明:1)子類只能繼承父類中的非私有成員2)Java中每個類都有父類,如果沒有顯式地標(biāo)明類的父類,則隱含為java.lang包中的Object類。三、成員的隱藏與覆蓋子類不僅可以繼承父類的所有非私有成員,還可以對父類的屬性變量及方法進行重新定義,分別稱為變量隱藏和方法覆蓋。若子類定義了與父類同名的變量成員,則父類中同名的變量成員將被隱藏起來。當(dāng)在子類對象中直接通過變量名訪問變量成員時,訪問到的是子類的同名變量,如果需要訪問同名的父類變量,必須通過父類名或super關(guān)鍵字來訪問。1.變量成員的隱藏三、成員的隱藏與覆蓋【例4-4】變量隱藏示例1。//創(chuàng)建父類A1classA1{inti=100;}//創(chuàng)建類A1的子類B1publicclassB1extendsA1{inti=200;//子類B1的同名成員變量ivoidprint(){System.out.println("子類中i="+i);System.out.println("父類中i="+super.i);//訪問父類A的同名成員變量i}publicstaticvoidmain(Stringargs[]){ (newB1()).print();}}三、成員的隱藏與覆蓋【例4-5】變量隱藏示例2。classA2{intm=5;publicvoidsetM(inti){
m=i;
}voidprinta(){
System.out.println("m="+m);
}}classB2extendsA2{
intm=10;voidprintb(){super.m=super.m+20;System.out.println("super.m="+super.m+"m="+m);}}publicclassTest{publicstaticvoidmain(String[]args){A2a=newA2();a.setM(50);a.printa();B2b=newB2();b.printb();b.printa();b.setM(60);b.printb();b.printa();a.printa();}}三、成員的隱藏與覆蓋子類中除可以定義自己的方法之外,也可對父類中的方法進行重新定義,這種情況稱為方法覆蓋(或重寫)。當(dāng)調(diào)用一個對象的方法時,Java總是先在該對象所屬的類中尋找該方法的定義,如果找不到,就到該類的上一級別的類中去尋找,直到找到了該方法的定義。如果需要調(diào)用父類中被覆蓋的方法,則使用關(guān)鍵字super。方法覆蓋中需要注意的問題是,子類重新定義父類已有的方法時,應(yīng)保持與父類完全相同的方法名、返回值和參數(shù)列表。2.方法覆蓋三、成員的隱藏與覆蓋【例4-6】方法覆蓋示例程序。//創(chuàng)建父類A3.classA3{inti;voidsetValue(){
i=100;
}publicvoidchangeValue(){
i=i-50;
}publicvoidprint(){
System.out.println("父類中i="+i);}}//創(chuàng)建類A的子類B3.classB3extendsA3{intk;
//k是子類B3加入的成員變量.voidsetValue(){
k=200;
}publicvoidchangeValue(){
k=k+50;
}publicvoidprint(){
super.print();//調(diào)用父為中的print()方法System.out.println("子類中k="+k);}}publicclassMethOver{publicstaticvoidmain(Stringargs[]){A3obj1=newA3();B3obj2=newB3();obj1.setValue();obj1.changeValue();obj1.print();obj2.setValue();obj2.changeValue();obj2.print();}}說明:如果將子類中changeValue()方法和print()方法的類修飾符public去年或改為private,程序就不能通過編譯,因為Java中規(guī)定,子類中重定義的方法不能比它所覆蓋的方法具有更嚴(yán)格的訪問權(quán)限。特別地,如果父類方法是public,那么子類方法一定要聲明為public,如果遺漏將發(fā)生編譯錯誤。三、成員的隱藏與覆蓋所謂多態(tài)是指不同類型的對象對同一行為作出的不同反應(yīng),多態(tài)是繼封裝、繼承之后,面向?qū)ο蟪绦蛟O(shè)計的第三大特性。例如不同階段學(xué)生的學(xué)習(xí),就是同一行為,但學(xué)習(xí)的具體內(nèi)容和具體實現(xiàn)過程是不一樣的,現(xiàn)實中這種的例子還有很多,Java中稱其為多態(tài)。即同一行為,不同對象有不同的實現(xiàn)方式或狀態(tài)。Java面向?qū)ο蟪绦蛟O(shè)計中實現(xiàn)多態(tài)技術(shù)的兩種重要手段是方法重載和方法覆蓋,實際編程中要注意兩者的區(qū)別。方法覆蓋是對從父類所繼承的方法進行重寫,而且要示要保持與父類同名方法完全相同的方法聲明部分(即應(yīng)與父類有完全相同的方法名、返回值和參數(shù)列表);方法重載是同一類中有多個同名方法,且要求與被重載的方法必須有不同的參數(shù)列表。3.類的多態(tài)及實現(xiàn)四、繼承與構(gòu)造方法當(dāng)一個類被實例化時,它的構(gòu)造方法自動被調(diào)用。當(dāng)一個子類被實例化時,即使沒有加入任何調(diào)用構(gòu)造方法的語句,子類的構(gòu)造方法和父類的構(gòu)造方法都被自動地調(diào)用。classSuperClass{publicSuperClass(){
System.out.println("SuperClassconstructor");
}publicSuperClass(Stringmsg){
System.out.println("SuperClassconstructor:"+msg);
}}【例4-7】隱含調(diào)用父類構(gòu)造方法示例。比較程序運行結(jié)果,認(rèn)識構(gòu)造方法的調(diào)用規(guī)則。classSubClassextendsSuperClass{publicSubClass(Stringmsg){System.out.println("SubClassconstructor:"+msg);
}}publicclassTestSuper{publicstaticvoidmain(Stringargs[]){
SubClassdescendent=newSubClass("Test");
}}四、繼承與構(gòu)造方法1)如果在子類的構(gòu)造方法中沒有明確地調(diào)用父類的構(gòu)造方法,則系統(tǒng)在創(chuàng)建子類時會自動調(diào)用父類的默認(rèn)構(gòu)造方法(即無參構(gòu)造方法)。2)如果在子類的構(gòu)造方法中有明確地調(diào)用父類的構(gòu)造方法的語句,則調(diào)用語句必須是子類構(gòu)造方法的第一個語句。構(gòu)造方法調(diào)用規(guī)則五、super和final關(guān)鍵字關(guān)鍵字super可以用于兩種用途:一是調(diào)用父類的構(gòu)造方法;二是調(diào)用父類中的成員。(1)調(diào)用父類的構(gòu)造方法super用于調(diào)用父類的構(gòu)造方法,其語法格式為:
super();或super(參數(shù)列表);該語句必須出現(xiàn)在子類構(gòu)造方法的第一個語句。(2)調(diào)用父類中的成員當(dāng)在子類中定義了與父類同名的變量或方法時,父類中的同名成員則被隱藏,如果要調(diào)用父類中的同名成員,則要加前綴super。其語法格式為:
super.變量名;或super.方法名([參數(shù)列表]);1.super關(guān)鍵字五、super和final關(guān)鍵字Java中關(guān)鍵字final可以用來修飾類、方法或變量。(1)final修飾類,阻止繼承對于不允許被繼承的類,可以使用final修飾符將它們定義為最終類。如:
finalclassberd{
publicvoid
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度私人車位買賣及車位保險合同
- 2025年度池塘水域資源綜合利用開發(fā)合同
- 跨學(xué)科合作中的學(xué)生團隊表達能力
- 客戶聲音分析在提升服務(wù)質(zhì)量中的作用
- 高??蒲袑嶒炇遗c教學(xué)實驗室的融合發(fā)展
- 家庭教育中孩子的綜合素質(zhì)培養(yǎng)
- 線上線下融合模式下體育用品店的運營策略研究
- 融合藝術(shù)元素的語文學(xué)習(xí)興趣激發(fā)
- 青少年網(wǎng)絡(luò)成癮與心理干預(yù)的研究進展
- 2025年甘肅工業(yè)職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 《航運市場營銷》課件-海運巨頭馬士基
- 博物館布展項目施工組織設(shè)計(完整模板)
- 繪本創(chuàng)作方案
- 《童年的水墨畫》的說課課件
- 地鐵保潔服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 2023年河南省新鄉(xiāng)市鳳泉區(qū)事業(yè)單位招聘53人高頻考點題庫(共500題含答案解析)模擬練習(xí)試卷
- 2023年小升初簡歷下載
- 廣府文化的奇葩
- 公路工程標(biāo)準(zhǔn)施工招標(biāo)文件(2018年版)解析
- 七年級地理下冊期末試卷(人教版)
- 第八節(jié) 元代散曲
評論
0/150
提交評論