第二章 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)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

姓名

性別年齡Worker類(lèi):

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

注意如省略extends,默認(rèn)父類(lèi)為Object類(lèi)只能有一個(gè)直接父類(lèi),即單繼承子類(lèi)繼承父類(lèi)的全部成員繼承示例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();}}成員的訪問(wèn)與繼承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有兩種使用形式:一是在子類(lèi)的構(gòu)造方法中直接調(diào)用父類(lèi)的構(gòu)造函數(shù),二是用來(lái)訪問(wèn)被子類(lèi)的成員隱藏或覆蓋的父類(lèi)成員。

調(diào)用父類(lèi)構(gòu)造函數(shù)形式:super(參數(shù));其中,方法名稱換成super,參數(shù)跟父類(lèi)構(gòu)造函數(shù)參數(shù)一致,注意super必須是在子類(lèi)構(gòu)造函數(shù)中的第一個(gè)執(zhí)行語(yǔ)句。而且,子類(lèi)構(gòu)造函數(shù)中如果沒(méi)有super()語(yǔ)句,系統(tǒng)會(huì)自動(dòng)加上一條super()的調(diào)用。構(gòu)造函數(shù)的調(diào)用,是按照繼承的順序,從超類(lèi)到子類(lèi)進(jìn)行的。訪問(wèn)被子類(lèi)的成員覆蓋的父類(lèi)成員。

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

doublef(intx,doubly){...}}classBextendsA{doublef(intx,doubly){...}}多態(tài)多態(tài)就是一個(gè)類(lèi)有其他的表示方式,但彼此之間必須是繼承的關(guān)系,多態(tài)能夠?qū)崿F(xiàn)動(dòng)態(tài)方法分配。Animal類(lèi):-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.如父類(lèi)有方法被子類(lèi)重寫(xiě),則以父類(lèi)引用調(diào)用該方法時(shí),會(huì)執(zhí)行子類(lèi)的方法。方法覆蓋示例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修飾的方法稱為抽象方法。抽象方法是一種只有方法頭、而沒(méi)有具體方法的方法。如:classAbstractTest{abstractvoidabstractmethod();}注意:抽象方法只有方法頭的聲明,用;代替方法體,沒(méi)有大括號(hào){}。

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

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

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論