




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第二章Java面向?qū)ο缶幊?繼承)繼承從現(xiàn)有類派生出新類,稱為繼承。通過繼承,可以實現(xiàn)源代碼級的復(fù)用,提高程序的可維護性。其中被繼承的類稱為父類,派生得到的類稱為子類。執(zhí)行繼承時,子類將獲得父類的屬性和行為,并具有自身特有的屬性和行為,java語言不支持多重繼承。
繼承是面向?qū)ο蟮淖钪匾奶厣唬试S創(chuàng)建分等級層次的類。Emoloyee類:
姓名
性別年齡Worker類:
工種工齡服裝津貼Work()Officer類:級別職稱是否配備交通工具Manage()職員類工人類,繼承了父類的姓名等屬性干部類,還包含級別等新的屬性和功能Animal類:-leg-kindAnimal()eat()move()getLegs()setLegs()Fish:Fish()Bird:Bird()Lion:Lion()Ostrich:Ostrich()hideHead()多層次類結(jié)構(gòu)繼承的實現(xiàn)繼承通過關(guān)鍵字extends聲明。聲明一個繼承父類的類的通常形式如下:classsubclass-nameextendssuperclass-name{//類體}
注意如省略extends,默認(rèn)父類為Object類只能有一個直接父類,即單繼承子類繼承父類的全部成員繼承示例classEmployee{
Stringname;//姓名
charsex;//性別
Employee(Stringn,chars){name=n;sex=s;}publicStringgetName(){returnname;}publicchargetSex(){returnsex;}}classOfficerextendsEmployee
{
chargrade;//級別
Stringprofession;//職稱
Officer(Stringn,chars,charg,Stringp){
name=n;sex=s;
grade=g;profession=p;}publicchargetGrade(){returngrade;}
publicbooleangetProfession(){returnprofession;}publicvoidmanage(){System.out.println(“管理工人?!?;}}classInheDemo{publicstaticvoidmain(Stringargs[]){Officerw=newOfficer(“M.John”,‘M’,‘B’,“高級”);
System.out.println(“員工信息");
System.out.println("姓名
:"+w.getName());System.out.println("性別
:
"+w.getSex());
System.out.println(“級別
:"+w.getgrade());System.out.println(“職稱:"+w.getProfession());
w.manage();}}成員的訪問與繼承classA{inti,j;voidshowij(){System.out.println(”i=”+i+”,j=”+j);}}classBextendsA{intk;voidshowk(){System.out.println(”k=”+k);}voidsum(){System.out.println(”sum=”+i+j+k);}}classDemo{publicstaticvoidmain(Stringargs[]){Aobj1=newA();Bobj2=newB();obj1.i=1;obj1.j=2;obj1.showij();obj2.i=3;obj2.j=4;obj3.k=5;obj2.showij();obj2.showk();obj2.sum();}}改成私有privatesuper引用super有兩種使用形式:一是在子類的構(gòu)造方法中直接調(diào)用父類的構(gòu)造函數(shù),二是用來訪問被子類的成員隱藏或覆蓋的父類成員。
調(diào)用父類構(gòu)造函數(shù)形式:super(參數(shù));其中,方法名稱換成super,參數(shù)跟父類構(gòu)造函數(shù)參數(shù)一致,注意super必須是在子類構(gòu)造函數(shù)中的第一個執(zhí)行語句。而且,子類構(gòu)造函數(shù)中如果沒有super()語句,系統(tǒng)會自動加上一條super()的調(diào)用。構(gòu)造函數(shù)的調(diào)用,是按照繼承的順序,從超類到子類進行的。訪問被子類的成員覆蓋的父類成員。
classA{inti;voidshow(){System.out.println(”i=”+i);}}classBextendsA{inti;voidshow(){System.out.println(”i=”+i+“父類中的i”+super.i);}}方法覆蓋方法覆蓋是Java語言實現(xiàn)多態(tài)性機制的另一種方式,也稱方法的重寫。在類層次結(jié)構(gòu)中,如果子類中的一個方法與父類中的方法有相同的方法名并具有相同數(shù)量和類型的參數(shù)列表,不同之處只有方法體,這種情況稱為方法覆蓋。當(dāng)一個覆蓋方法通過父類引用被調(diào)用時,Java語言根據(jù)當(dāng)前被引用對象的類型來決定執(zhí)行哪個版本的方法??梢酝ㄟ^super關(guān)鍵字調(diào)用直接父類中覆蓋的方法。classA{
doublef(intx,doubly){...}}classBextendsA{doublef(intx,doubly){...}}多態(tài)多態(tài)就是一個類有其他的表示方式,但彼此之間必須是繼承的關(guān)系,多態(tài)能夠?qū)崿F(xiàn)動態(tài)方法分配。Animal類:-leg-kindAnimal()eat()move()getLegs()setLegs()Fish:Fish()move()Bird:Bird()move()Lion:Lion()Ostrich:Ostrich()move()hideHead注意:1.不管用哪種引用表示對象,歸根到底表示的是實例化時所生成的對象。2.當(dāng)把某對象用其他引用表示時,則只能使用該引用所提供的屬性和方法。3.如父類有方法被子類重寫,則以父類引用調(diào)用該方法時,會執(zhí)行子類的方法。方法覆蓋示例classA{inti,j;voidshow(){System.out.println(”i=”+i+”,j=”+j);}}classBextendsA{intk;voidshow(){System.out.println(”i=”+i+”,j=”+j+”,k=”+k);}}classInheDemo{publicstaticvoidmain(Stringargs[]){Aobj1=newA();Aobj2=newB();Bobj3=newB();obj1.show();obj2.show();obj3.show();}}抽象方法用abstract修飾的方法稱為抽象方法。抽象方法是一種只有方法頭、而沒有具體方法的方法。如:classAbstractTest{abstractvoidabstractmethod();}注意:抽象方法只有方法頭的聲明,用;代替方法體,沒有大括號{}。
抽象方法抽象類超類中只定義了讓所有子類共享的抽象方法,具體的細節(jié)需要子類去實現(xiàn),這樣的超類很抽象,稱為抽象類。注意,抽象類是不可使用的,或者說不能實例化對象。(但可以有構(gòu)造函數(shù))當(dāng)子類繼承一個抽象類時,它必須重寫父類的所有抽象方法,否則,子類也必須定義為抽象類。abstractclassEmployee{ intbasic=2000;
abstractvoidsalary();//抽象方法}classManagerextendsEmployee{voidsalary(){ System.out.println("薪資等于"+basic*5);}}
classWorkerextendsEmployee{voidsalary(){ System.out.println("薪資等于"+basic*2);}}在子類中提供實現(xiàn)在子類中提供實現(xiàn)抽象方法沒有方法主體接口Java程序一次只能繼承一個類。如果想實現(xiàn)多繼承可以通過接口實現(xiàn)。接口是一種特殊的類,是一些抽象方法和固定變量的集合。接口不能有任何具體的方法,必須全是抽象方法;在接口中也可以聲明變量,但必須是常量類型。接口可以通過關(guān)鍵字interface定義。通過接口可以實現(xiàn)不相關(guān)類的相同行為,而不需考慮這些類之間的層次關(guān)系。接口的定義//含抽象方法的接口interfacemyinterface{abstractintadd(intx,inty); abstractvoidvolume(intx,inty,intz);}//定義包含常量的接口interfacemyconstants{ publicstaticfinaldoubleprice=1450.00;publicstaticfinalintcounter=5;}定義一個接口:實現(xiàn)接口用關(guān)鍵字implements實現(xiàn)接口,例如:classdemoimplementsmyinterface在類中對接口里面的方法進行重寫(實現(xiàn))即可如果有一個以上接口的被實現(xiàn),則用逗號隔開接口名稱,如下所示:
classdemoimplementsMycalc,Mycount接口使用示例interfaceA{doubleg=9.8;voidshow();}classInterfaceTest{publicstaticvoidmain(Stringargs[]){Bb=newB();b.show();}}classBimplementsA{publicvoidshow(){System.out.println(“g=“+g);}}省略修飾符接口引用接口不能包含構(gòu)造函數(shù),也就是說,接口不能實例化對象。但可以用接口名去引用一個對象,該對象必須是由實現(xiàn)了接口的類所實例化的對象。interfaceA{
doublef(intx,doubly);}classBimplementsA{doublef(intx,doubly){...}}Bobj1=newB();Aobj2=newB();obj1.f(1,2);obj2.f(3,4);包為了管理類和接口,Java體系制定了包的概念,包是類、接口和子包的集合,利用包可以將用途相近但功能不同的類或接口放在一起,就像在文件夾中,使類的管理更清晰。包是一種松散的類集合,一般不要求處于同一個包中的類有明確的相互關(guān)系,如包含、繼承等。包也稱為類庫。建立包創(chuàng)建一個包的語法:package包名;如果java源文件省略了package語句,在該文件中所有類被包含在一個默認(rèn)的沒有名稱的包中。在java中,可以創(chuàng)建一個多層次包,只要在每個包與上層包之間用“.”分隔開,如下所示:packagepkg1.pkg2.pkg3;在創(chuàng)建包后還需要在操作系統(tǒng)當(dāng)前目錄下創(chuàng)建一個與該包匹配的文件夾結(jié)構(gòu)。導(dǎo)入包導(dǎo)入一個包的語法:import包名.*;導(dǎo)入一個包時,應(yīng)使用包名稱加類名稱的形式。如引入上例中的pkg3中的類,可寫入以下語句:importpkg1.pkg2.pgk3.類名;為了在任何地方都可使用的自定義的包,可將當(dāng)前存放自定義包的目錄加到classpath中。訪問控制符Java語言提供的訪問控制符范圍同一個類同一個包不同包的子類不同包的非子類Java語言的訪問控制符有public公共訪問控制符
private私有訪問控制符protected保護訪問控制符默認(rèn)訪問控制符其中,修使類的訪問控制符可以是:public或默認(rèn)訪問控制符,修飾域或方法的可以上面的任何一種。注意,public會造成安全性和數(shù)據(jù)封裝性下降,所以一般應(yīng)減少使用public。同一個類中同一個包中不同包中的子類不同包中的非子類private允許protected允許允許允許public允許允許允許允許friendly允許允許常見的系統(tǒng)包包名包含內(nèi)容java.applet提供創(chuàng)建applet小程序所需要的類java.awt包含用于創(chuàng)建用戶界面和繪制圖形圖像的所有類java.beans包含與開發(fā)beans有關(guān)的類java.io提供與輸入和輸出相關(guān)的類java.lang提供Java語言程序設(shè)計的基礎(chǔ)類提供實現(xiàn)網(wǎng)絡(luò)操作的類java.sql提供實現(xiàn)數(shù)據(jù)庫訪問功能的類java.text提供處理文本、日期、數(shù)字和消息的類和接口java.util提供處理日期、時間、隨機數(shù)生成等各種實用工具的類提供用于網(wǎng)絡(luò)應(yīng)用程序的類javax.swing提供一組與AWT功能相同的純Java的組件類Java是一種面向?qū)ο笳Z言,Java中的類把方法與數(shù)據(jù)連接在一起,并構(gòu)成了自包含式的處理單元。但在Java中不能定義基本類型(primitivetype),為了能將基本類型視為對象來處理,并能使用相關(guān)的方法,Java為每個基本類型都提供了封裝類。這樣,我們便可以把這些基本類型轉(zhuǎn)化為對象來處理數(shù)據(jù)封裝類數(shù)據(jù)類型封裝類booleanBooleanbyteBytecharCharacterdoubleDoublefloatFloatintIntegerlongLongshortShortObject類Object類包括在java.lang
包中,被稱為根類,是Java類體系結(jié)構(gòu)的根。Java語言中的每個類都是Object
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生活護理課件
- 基于struts2hibernate的手機銷售系統(tǒng)的設(shè)計與實現(xiàn)
- 心理學(xué)考試題及答案
- 小車科目一題庫及答案
- 剝豆教學(xué)課件
- 銷售工作心得15篇
- 吊籃老化改造方案(3篇)
- 農(nóng)村土堡改造方案(3篇)
- 2019-2021北京高中生物合格性考試匯編:細胞的分化、衰老和凋亡(教師版)
- 生殖健康知識課件
- 高中家長會 高三上學(xué)期迎戰(zhàn)首考家長會課件
- 四川省第二地質(zhì)大隊招聘考試真題2024
- 學(xué)習(xí)解讀公平競爭審查條例實施辦法課件
- 基于物聯(lián)網(wǎng)的智能家居安全監(jiān)控系統(tǒng)建設(shè)方案
- 2024年中國農(nóng)業(yè)銀行深圳市分行招聘筆試真題
- 技能培訓(xùn)學(xué)校的部門設(shè)置與職責(zé)劃分
- 大數(shù)據(jù)分析在運維中的應(yīng)用-第1篇-深度研究
- 七年級道法下冊 第二學(xué)期 期末綜合測試卷(人教河北版 2025年春)
- 2025年中國鱈魚行業(yè)市場全景評估及發(fā)展戰(zhàn)略規(guī)劃報告
- 交流激勵下的鋸齒環(huán)狀表面介質(zhì)阻擋放電特性
- 持續(xù)質(zhì)量改進提高霧化吸入正確率
評論
0/150
提交評論