第二章 Java面向?qū)ο缶幊?2_第1頁(yè)
第二章 Java面向?qū)ο缶幊?2_第2頁(yè)
第二章 Java面向?qū)ο缶幊?2_第3頁(yè)
第二章 Java面向?qū)ο缶幊?2_第4頁(yè)
第二章 Java面向?qū)ο缶幊?2_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第二章Java面向?qū)ο缶幊?繼承)繼承從現(xiàn)有類派生出新類,稱為繼承。通過繼承,可以實(shí)現(xiàn)源代碼級(jí)的復(fù)用,提高程序的可維護(hù)性。其中被繼承的類稱為父類,派生得到的類稱為子類。執(zhí)行繼承時(shí),子類將獲得父類的屬性和行為,并具有自身特有的屬性和行為,java語(yǔ)言不支持多重繼承。

繼承是面向?qū)ο蟮淖钪匾奶厣?,它允許創(chuàng)建分等級(jí)層次的類。Emoloyee類:

姓名

性別年齡Worker類:

工種工齡服裝津貼Work()Officer類:級(jí)別職稱是否配備交通工具M(jìn)anage()職員類工人類,繼承了父類的姓名等屬性干部類,還包含級(jí)別等新的屬性和功能Animal類:-leg-kindAnimal()eat()move()getLegs()setLegs()Fish:Fish()Bird:Bird()Lion:Lion()Ostrich:Ostrich()hideHead()多層次類結(jié)構(gòu)繼承的實(shí)現(xiàn)繼承通過關(guān)鍵字extends聲明。聲明一個(gè)繼承父類的類的通常形式如下:classsubclass-nameextendssuperclass-name{//類體}

注意如省略extends,默認(rèn)父類為Object類只能有一個(gè)直接父類,即單繼承子類繼承父類的全部成員繼承示例classEmployee{

Stringname;//姓名

charsex;//性別

Employee(Stringn,chars){name=n;sex=s;}publicStringgetName(){returnname;}publicchargetSex(){returnsex;}}classOfficerextendsEmployee

{

chargrade;//級(jí)別

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’,“高級(jí)”);

System.out.println(“員工信息");

System.out.println("姓名

:"+w.getName());System.out.println("性別

"+w.getSex());

System.out.println(“級(jí)別

:"+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ù)中的第一個(gè)執(zhí)行語(yǔ)句。而且,子類構(gòu)造函數(shù)中如果沒有super()語(yǔ)句,系統(tǒng)會(huì)自動(dòng)加上一條super()的調(diào)用。構(gòu)造函數(shù)的調(diào)用,是按照繼承的順序,從超類到子類進(jìn)行的。訪問被子類的成員覆蓋的父類成員。

classA{inti;voidshow(){System.out.println(”i=”+i);}}classBextendsA{inti;voidshow(){System.out.println(”i=”+i+“父類中的i”+super.i);}}方法覆蓋方法覆蓋是Java語(yǔ)言實(shí)現(xiàn)多態(tài)性機(jī)制的另一種方式,也稱方法的重寫。在類層次結(jié)構(gòu)中,如果子類中的一個(gè)方法與父類中的方法有相同的方法名并具有相同數(shù)量和類型的參數(shù)列表,不同之處只有方法體,這種情況稱為方法覆蓋。當(dāng)一個(gè)覆蓋方法通過父類引用被調(diào)用時(shí),Java語(yǔ)言根據(jù)當(dāng)前被引用對(duì)象的類型來決定執(zhí)行哪個(gè)版本的方法??梢酝ㄟ^super關(guān)鍵字調(diào)用直接父類中覆蓋的方法。classA{

doublef(intx,doubly){...}}classBextendsA{doublef(intx,doubly){...}}多態(tài)多態(tài)就是一個(gè)類有其他的表示方式,但彼此之間必須是繼承的關(guān)系,多態(tài)能夠?qū)崿F(xiàn)動(dòng)態(tài)方法分配。Animal類:-leg-kindAnimal()eat()move()getLegs()setLegs()Fish:Fish()move()Bird:Bird()move()Lion:Lion()Ostrich:Ostrich()move()hideHead注意:1.不管用哪種引用表示對(duì)象,歸根到底表示的是實(shí)例化時(shí)所生成的對(duì)象。2.當(dāng)把某對(duì)象用其他引用表示時(shí),則只能使用該引用所提供的屬性和方法。3.如父類有方法被子類重寫,則以父類引用調(diào)用該方法時(shí),會(huì)執(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();}注意:抽象方法只有方法頭的聲明,用;代替方法體,沒有大括號(hào){}。

抽象方法抽象類超類中只定義了讓所有子類共享的抽象方法,具體的細(xì)節(jié)需要子類去實(shí)現(xiàn),這樣的超類很抽象,稱為抽象類。注意,抽象類是不可使用的,或者說不能實(shí)例化對(duì)象。(但可以有構(gòu)造函數(shù))當(dāng)子類繼承一個(gè)抽象類時(shí),它必須重寫父類的所有抽象方法,否則,子類也必須定義為抽象類。abstractclassEmployee{ intbasic=2000;

abstractvoidsalary();//抽象方法}classManagerextendsEmployee{voidsalary(){ System.out.println("薪資等于"+basic*5);}}

classWorkerextendsEmployee{voidsalary(){ System.out.println("薪資等于"+basic*2);}}在子類中提供實(shí)現(xiàn)在子類中提供實(shí)現(xiàn)抽象方法沒有方法主體接口Java程序一次只能繼承一個(gè)類。如果想實(shí)現(xiàn)多繼承可以通過接口實(shí)現(xiàn)。接口是一種特殊的類,是一些抽象方法和固定變量的集合。接口不能有任何具體的方法,必須全是抽象方法;在接口中也可以聲明變量,但必須是常量類型。接口可以通過關(guān)鍵字interface定義。通過接口可以實(shí)現(xiàn)不相關(guān)類的相同行為,而不需考慮這些類之間的層次關(guān)系。接口的定義//含抽象方法的接口interfacemyinterface{abstractintadd(intx,inty); abstractvoidvolume(intx,inty,intz);}//定義包含常量的接口interfacemyconstants{ publicstaticfinaldoubleprice=1450.00;publicstaticfinalintcounter=5;}定義一個(gè)接口:實(shí)現(xiàn)接口用關(guān)鍵字implements實(shí)現(xiàn)接口,例如:classdemoimplementsmyinterface在類中對(duì)接口里面的方法進(jìn)行重寫(實(shí)現(xiàn))即可如果有一個(gè)以上接口的被實(shí)現(xiàn),則用逗號(hào)隔開接口名稱,如下所示:

classdemoimplementsMycalc,Mycount接口使用示例interfaceA{doubleg=9.8;voidshow();}classInterfaceTest{publicstaticvoidmain(Stringargs[]){Bb=newB();b.show();}}classBimplementsA{publicvoidshow(){System.out.println(“g=“+g);}}省略修飾符接口引用接口不能包含構(gòu)造函數(shù),也就是說,接口不能實(shí)例化對(duì)象。但可以用接口名去引用一個(gè)對(duì)象,該對(duì)象必須是由實(shí)現(xiàn)了接口的類所實(shí)例化的對(duì)象。interfaceA{

doublef(intx,doubly);}classBimplementsA{doublef(intx,doubly){...}}Bobj1=newB();Aobj2=newB();obj1.f(1,2);obj2.f(3,4);包為了管理類和接口,Java體系制定了包的概念,包是類、接口和子包的集合,利用包可以將用途相近但功能不同的類或接口放在一起,就像在文件夾中,使類的管理更清晰。包是一種松散的類集合,一般不要求處于同一個(gè)包中的類有明確的相互關(guān)系,如包含、繼承等。包也稱為類庫(kù)。建立包創(chuàng)建一個(gè)包的語(yǔ)法:package包名;如果java源文件省略了package語(yǔ)句,在該文件中所有類被包含在一個(gè)默認(rèn)的沒有名稱的包中。在java中,可以創(chuàng)建一個(gè)多層次包,只要在每個(gè)包與上層包之間用“.”分隔開,如下所示:packagepkg1.pkg2.pkg3;在創(chuàng)建包后還需要在操作系統(tǒng)當(dāng)前目錄下創(chuàng)建一個(gè)與該包匹配的文件夾結(jié)構(gòu)。導(dǎo)入包導(dǎo)入一個(gè)包的語(yǔ)法:import包名.*;導(dǎo)入一個(gè)包時(shí),應(yīng)使用包名稱加類名稱的形式。如引入上例中的pkg3中的類,可寫入以下語(yǔ)句:importpkg1.pkg2.pgk3.類名;為了在任何地方都可使用的自定義的包,可將當(dāng)前存放自定義包的目錄加到classpath中。訪問控制符Java語(yǔ)言提供的訪問控制符范圍同一個(gè)類同一個(gè)包不同包的子類不同包的非子類Java語(yǔ)言的訪問控制符有public公共訪問控制符

private私有訪問控制符protected保護(hù)訪問控制符默認(rèn)訪問控制符其中,修使類的訪問控制符可以是:public或默認(rèn)訪問控制符,修飾域或方法的可以上面的任何一種。注意,public會(huì)造成安全性和數(shù)據(jù)封裝性下降,所以一般應(yīng)減少使用public。同一個(gè)類中同一個(gè)包中不同包中的子類不同包中的非子類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語(yǔ)言程序設(shè)計(jì)的基礎(chǔ)類提供實(shí)現(xiàn)網(wǎng)絡(luò)操作的類java.sql提供實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問功能的類java.text提供處理文本、日期、數(shù)字和消息的類和接口java.util提供處理日期、時(shí)間、隨機(jī)數(shù)生成等各種實(shí)用工具的類提供用于網(wǎng)絡(luò)應(yīng)用程序的類javax.swing提供一組與AWT功能相同的純Java的組件類Java是一種面向?qū)ο笳Z(yǔ)言,Java中的類把方法與數(shù)據(jù)連接在一起,并構(gòu)成了自包含式的處理單元。但在Java中不能定義基本類型(primitivetype),為了能將基本類型視為對(duì)象來處理,并能使用相關(guān)的方法,Java為每個(gè)基本類型都提供了封裝類。這樣,我們便可以把這些基本類型轉(zhuǎn)化為對(duì)象來處理數(shù)據(jù)封裝類數(shù)據(jù)類型封裝類booleanBooleanbyteBytecharCharacterdoubleDoublefloatFloatintIntegerlongLongshortShortObject類Object類包括在java.lang

包中,被稱為根類,是Java類體系結(jié)構(gòu)的根。Java語(yǔ)言中的每個(gè)類都是Object

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論