Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目六 抽象類、接口和包_第1頁
Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目六 抽象類、接口和包_第2頁
Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目六 抽象類、接口和包_第3頁
Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目六 抽象類、接口和包_第4頁
Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目六 抽象類、接口和包_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

項(xiàng)目六抽象類、接口和包

類的繼承是OPP(面向?qū)ο蟪绦蛟O(shè)計(jì))的特點(diǎn)之一,但一個(gè)子類只能繼承自一個(gè)超類,還是存在局限性,可以使用接口解決。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,體現(xiàn)了OPP的多態(tài)性特點(diǎn)。項(xiàng)目描述

在繼承類或?qū)崿F(xiàn)接口的時(shí)候,超類或接口中的方法大多只有方法名,沒有方法體,稱為抽象方法,包含抽象方法的類稱為抽象類。為了管理方便,可以將一些功能相似的類放入包中,這也體現(xiàn)了OPP的封裝性,包中和類與方法可以用不同的關(guān)鍵詞修飾以獲得不同的訪問權(quán)限。任務(wù)一抽象類和抽象方法

【任務(wù)描述】任務(wù)6_1:創(chuàng)建一個(gè)有關(guān)于立體模型,名為Three_dimension的抽象類,屬性有“底面圓半徑”、“高”,抽象方法:1)計(jì)算此立體模型的表面積。2)計(jì)算此立體模型的體積。

任務(wù)6_2:分別創(chuàng)建一個(gè)圓柱體的子類Circular_cylinder和一個(gè)圓錐體的子類Circular_cone,覆蓋超類Three_dimension當(dāng)中的抽象方法。任務(wù)6_3:寫一個(gè)包含main()方法的測(cè)試類。在main()方法中產(chǎn)生兩個(gè)子類的實(shí)例對(duì)象。再求出底面圓半徑為2,高為10的兩個(gè)立體模型的表面積和體積。

【必備知識(shí)】

1.什么是抽象方法。(用abstract關(guān)鍵字去聲明的方法)

在前面的項(xiàng)目中我們學(xué)習(xí)了類的繼承,在超類中所定義的方法,有的時(shí)候沒有方法體,子類要繼承超類的時(shí)候才在方法中寫出方法體。這是因?yàn)槎鄠€(gè)子類在繼承同一超類的時(shí)候,方法體并不相同,比如超類“公司職員”,子類有“前臺(tái)秘書”、“銷售代表”和“董事長(zhǎng)”,但他們的工資計(jì)算方法不同,“前臺(tái)秘書”是領(lǐng)月薪的,“銷售代表”是領(lǐng)月薪和提成的,而“董事長(zhǎng)”是拿年薪和分紅的。這時(shí)候在超類中,工資計(jì)算方法就不能寫出方法體,而是要在各個(gè)子類當(dāng)中再寫出來。這種沒有方法體的方法稱為抽象方法。2.抽象方法的聲明

抽象方法的聲明格式為:

[格式6_1抽象方法的聲明]

權(quán)限修飾符abstract

返回值類型方法名(形式參數(shù)列表);

說明:

(1)修飾符abstract用于定義抽象方法及抽象類;

(2)abstract放在權(quán)限修飾符與返回值類型之間,如果有static,則放在static之后;

(3)方法名后的參數(shù)是形式參數(shù);

(4)抽象方法不能有方法體,也不能有{},因此要加上;表示此句結(jié)束。3.抽象類(1)一個(gè)類中如果定義了抽象方法,這個(gè)類必須定義為抽象類。(2)抽象類的定義,在class前使用修飾符abstract。在抽象類中可以沒有抽象方法,但抽象方法必須在抽象類中。(3)抽象類不能用new語句創(chuàng)建實(shí)例,如果想要?jiǎng)?chuàng)建實(shí)例,必須要用子類將抽象方法繼承后再用子類創(chuàng)建實(shí)例。子類必須覆蓋超類中的所有抽象方法,否則子類也必須定義為抽象類。4.抽象類的定義抽象類的定義格式如下:[格式6_2抽象類的定義]權(quán)限修飾符abstract抽象類名稱{數(shù)據(jù)類型成員變量1;//聲明成員變量1數(shù)據(jù)類型成員變量2;//聲明成員變量2

……權(quán)限修飾符abstract返回值類型方法名1(形式參數(shù)列表);

權(quán)限修飾符abstract返回值類型方法名2(形式參數(shù)列表);

……

}說明:(1)抽象類是類的一種,類名要遵循標(biāo)志符的命名規(guī)則,并且每個(gè)單詞首字母要大寫;(2)抽象類可以包含抽象方法,也可以包含普通的方法;(3)抽象類是不能直接創(chuàng)建實(shí)例,需要被子類繼承后再由子類創(chuàng)建實(shí)例?!窘忸}思路】

任務(wù)6_1:

1.用abstract修飾符定義一個(gè)名為Three_dimension的抽象類;

2.往Three_dimension類中添加屬性:底邊圓半徑r和高h(yuǎn);

3.往Three_dimension類中添加構(gòu)造方法,讀入底邊圓半徑r和高h(yuǎn);

4.往Three_dimension類中添加superficial_area()和volume()兩個(gè)抽象方法,分別用于計(jì)算立體模型的表面積和體積。任務(wù)6_2:

5.定義一個(gè)圓柱體的子類Circular_cylinder和一個(gè)圓錐體的子類Circular_cone,覆蓋超類Three_dimension;

6.覆蓋超類的構(gòu)造方法和抽象方法;

任務(wù)6_3:在測(cè)試類中,創(chuàng)建對(duì)象,計(jì)算出底面圓半徑為2,高為10的兩個(gè)立體模型的表面積和體積。【任務(wù)透析】//Three_dimension.java

public

abstract

classThree_dimension {

doubler;//聲明底邊圓面積屬性

doubleh;//聲明高屬性

Three_dimension(doubleradius,doubleheight) { r=radius; h=height; }

public

abstract

doublesuperficial_area();

public

abstract

doublevolume();//Circular_cylinder.javapublic

classCircular_cylinderextendsThree_dimension{Circular_cylinder(doubler,doubleh){ super(r,h);}

public

doublesuperficial_area(){ returnr*r*Math.PI*2+r*h*Math.PI*2;//圓柱體的表面積}

public

doublevolume(){ returnr*r*Math.PI*h;//圓柱體的體積}}//Circular_cone.javapublic

classCircular_coneextendsThree_dimension{Circular_cone(doubler,doubleh){

super(r,h);}

public

doublesuperficial_area(){

returnMath.PI*r*Math.sqrt(r*r+h*h);//圓錐體的表面積

}

public

doublevolume(){

returnr*r*Math.PI*h/3;//圓錐體的體積

}}//Example6_1public

classExample6_1{

public

static

voidmain(String[]args){Circular_cylinderc1=newCircular_cylinder(2,10);//創(chuàng)建圓柱體實(shí)例c1Circular_conec2=newCircular_cone(2,10);//創(chuàng)建圓錐體實(shí)例c2System.out.println("圓柱體的表面積為"+c1.superficial_area());System.out.println("圓柱體的體積為"+c1.volume());System.out.println("圓錐體的表面積為"+c2.superficial_area());System.out.println("圓錐體的體積為"+c2.volume());}}圖6.1Example6_1.java的運(yùn)行結(jié)果【課堂提問】

★什么是抽象方法,什么是抽象類,它們應(yīng)如何定義或聲明?

★抽象類必須要包含抽象方法嗎?抽象方法必須要在抽象類中嗎?

★如果子類不能覆蓋超類中的全部抽象方法,子類必須是抽象類嗎?

★如果抽象類中有非抽象的方法,子類也可以覆蓋這個(gè)方法嗎?

【現(xiàn)場(chǎng)演練】

定義一個(gè)表示員工的Employee抽象類,包含的屬性有“姓名”、“性別”和“年齡”,還有表示工資計(jì)算的方法salary_count()。再定義兩個(gè)繼承自Employee的子類,一個(gè)為表示經(jīng)理的Manager,一個(gè)為表示秘書的Secretary,覆蓋salary_count()方法。任務(wù)二接口與接口的實(shí)現(xiàn)

【任務(wù)描述】任務(wù)6_3:定義一個(gè)表示控制器的接口Controller,成員變量有表示開關(guān)狀態(tài)的power、表示音量的volumn,成員方法有構(gòu)造方法、設(shè)置開關(guān)狀態(tài)的powerOnOff()方法、提高音量的volumnUp()方法、降低音量的volumnDown()方法。再定義一個(gè)它的子接口RemoteController表示遙控器。任務(wù)6_4:定義一個(gè)類Tv實(shí)現(xiàn)遙控器接口,覆蓋所有方法,創(chuàng)建Tv對(duì)象,并調(diào)用這些方法?!颈貍渲R(shí)】1.什么是接口與前面介紹的類相似,接口是另一種定義數(shù)據(jù)類型的方法。接口也可以定義自己的成員變量與成員方法,可以通過繼承產(chǎn)生子接口,而且接口只有被類實(shí)現(xiàn)后才可以創(chuàng)建對(duì)象。接口的命名方法與類命名一樣,而且與類不能重名。接口用public修飾后,.java文件必須以這個(gè)接口名命名。接口是體現(xiàn)OOP(面向?qū)ο蟪绦蛟O(shè)計(jì))多態(tài)性的重要途徑,一個(gè)類只能繼承自一個(gè)超類(單繼承),但一個(gè)類可以實(shí)現(xiàn)多個(gè)接口(多繼承)。如在實(shí)際運(yùn)用中,正方形既繼承長(zhǎng)方形,又繼承菱形的一些特征,如果把長(zhǎng)方形和菱形定義為類,顯然正方形不可能同時(shí)繼承這兩個(gè)超類,這時(shí)可以把長(zhǎng)方形和菱形定義為接口,由正方形實(shí)現(xiàn)這兩個(gè)接口,達(dá)到了多繼承的目的。接口中方法必須全部為抽象方法。與類的繼承相似,在實(shí)現(xiàn)接口的時(shí)候,類必須覆蓋接口中所有的方法。如果一個(gè)類同時(shí)實(shí)現(xiàn)了幾個(gè)接口,也必須覆蓋所有接口中的所有方法。2.接口如何定義接口的定義格式為:[格式6_3接口定義方法]interface接口名{

publicstaticfinal數(shù)據(jù)類型1變量1=值1;

publicstaticfinal數(shù)據(jù)類型2變量2=值2;

……publicabstract返回值類型1方法名1(形式參數(shù)列表);

publicabstract返回值類型2方法名2(形式參數(shù)列表);

……

}說明:(1)修飾符interface用于定義接口;(2)接口中的成員變量用publicstaticfinal修飾,說明接口中只能聲明常量,因此,成員變量在聲明后應(yīng)該立即賦值;(3)成員變量前的publicstaticfinal修飾符可以全部或部分省略;(4)接口中的成員方法用publicabstract修飾,說明接口中的方法必須都是抽象方法;(5)成員方法前的publicabstract可以省略,但省略后所代表的意義不變。3.接口怎樣繼承[格式6_4接口繼承方法]interface接口名1extends接口名2,接口名3,...{……

}說明:(1)接口的繼承格式與類的繼承格式相同;(2)一個(gè)接口可以繼承自多個(gè)接口;(3)子接口繼承超接口后,超接口中所有的屬性和方法也被子接口繼承。4.接口怎樣實(shí)現(xiàn)與抽象類相似,接口定義后不能直接創(chuàng)建對(duì)象,必須由類實(shí)現(xiàn)后再創(chuàng)建類的對(duì)象。每個(gè)類只能繼承自一個(gè)超類,但可以實(shí)現(xiàn)多個(gè)接口。實(shí)現(xiàn)方法如下:[格式6_5接口實(shí)現(xiàn)方法]class類名extends超類名implements接口1,接口2,...{

public返回值類型1方法名1(形式參數(shù)列表);//覆蓋方法1

public返回值類型2方法名2(形式參數(shù)列表);//覆蓋方法2

……

}

說明:

(1)一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,用implements引導(dǎo),多個(gè)接口用,分隔;

(2)可以在實(shí)現(xiàn)接口的同時(shí)繼承超類;

(3)必須要覆蓋所有接口的所有方法;

(4)覆蓋這些方法時(shí),public修飾符不能省略;

(5)接口中的變量可以被覆蓋,也可以不被覆蓋。【解題思路】

任務(wù)6_4:1.定義一個(gè)名為Controller的接口;2.往Controller接口中添加方法:構(gòu)造方法、powerOnOff()表示設(shè)置開關(guān)、volumnUp()和volumnDown()方法提高或降低音量;3.在接口Controller中繼續(xù)添加一個(gè)抽象方法outPut();4.定義一個(gè)名為RemoteController的子接口。任務(wù)6_5:5.定義一個(gè)Tv的類,實(shí)現(xiàn)接口RemoteController,并添加成員變量:開關(guān)狀態(tài)power和音量volumn。6.覆蓋所實(shí)現(xiàn)接口所有的方法;7.創(chuàng)建對(duì)象,調(diào)用這些方法。【任務(wù)透析】//Controller.javapublic

interfaceController{

voidpowerOnOff();//設(shè)置開關(guān)狀態(tài)的抽象方法

voidvolumnUp(intincrement);//整型increment表示音量的步進(jìn)值

voidvolumnDown(intincrement);

voidoutPut();//輸出所有成員變量值; //以上所有抽象方法都省略了publicabstract}//RemoteController.javapublic

interfaceRemoteControllerextendsController{ //接口RemoteController繼承自接口Controller}//Tv.javapublic

classTvimplementsRemoteController{

booleanpower;//成員變量power表示開關(guān)的狀態(tài)

intvolumn;//成員變量volumn表示音量

intvolumnTemp;//成員變量volumTemp表示音量的暫存項(xiàng)

Tv(booleanpower,intvolumn)//定義構(gòu)造方法

{

this.power=power;

this.volumn=volumn; }

public

voidpowerOnOff(){ power=!power;

if(power) volumn=volumnTemp;

else { volumnTemp=volumn; volumn=0; } }public

voidvolumnUp(intincrement){ volumn=volumn+increment;}

public

voidvolumnDown(intincrement){ volumn=volumn-increment;}

public

voidoutPut(){ System.out.print("當(dāng)前電視機(jī)的狀態(tài)是"+power+","); System.out.println("當(dāng)前電視機(jī)的音量是"+volumn); }}//Example6_2.javapublic

classExample6_2{

public

static

voidmain(Stringargs[]){Tvt=newTv(true,10);//創(chuàng)建實(shí)例t并代入初始量

t.outPut();t.volumnUp(3);//將音量升高3;t.outPut();t.volumnDown(2);//將音量降低2;t.outPut();t.powerOnOff();t.outPut();t.powerOnOff();t.outPut();}}圖6.2Example6_2.java的運(yùn)行結(jié)果【課堂提問】★什么是接口,接口里都有什么?★接口的實(shí)現(xiàn)與類的繼承有什么異同之處?★接口如何繼承?★類實(shí)現(xiàn)接口時(shí),如果這個(gè)類不是抽象類,是否必須覆蓋這個(gè)接口中所有的方法?如果這個(gè)類是抽象類,那么又如何?【現(xiàn)場(chǎng)演練】定義一個(gè)類Car實(shí)現(xiàn)上述例題中的RemoteControl接口表示遙控汽車,成員變量有boolean型的power表示開關(guān)狀態(tài)、int型的volumn表示速度,成員方法有構(gòu)造方法、powerOnOff()設(shè)置開關(guān)狀態(tài)、volumnUp()和volumnDown()表示提高或降低速度。創(chuàng)建Car對(duì)象,并調(diào)用這些方法。任務(wù)三包與訪問權(quán)限

【任務(wù)描述】任務(wù)6_3:定義一個(gè)類Example3,然后將這個(gè)類封裝在名為package1的包中,設(shè)置這個(gè)類只能在包內(nèi)是可見的?!颈貍渲R(shí)】1.什么是包在Java中,為了方便管理類,可以將一些相關(guān)的類用包來組織。包不僅是一種管理與組織類的方式,而且可以避免類的命名沖突。在包中定義的類必須要通過包名來訪問。這樣,在不同的包中,就可以出現(xiàn)相同名稱的類,減少重名的發(fā)生率。除了方便管理與組織,包的另外一個(gè)用處是設(shè)定類的訪問機(jī)制。類可以設(shè)定為只能在包中訪問,也可以設(shè)定為在包外可以訪問,這樣也體現(xiàn)了OOP(面向?qū)ο蟪绦蛟O(shè)計(jì))的封裝性。2.如何定義包包的定義方法如下:[格式6_6包的定義方法]package包名;class類名{……

}說明:(1)包的定義用package語句;(2)包的定義在類的頂部;(3)Java中所有的類都屬于某個(gè)包,如果沒有指定,則在默認(rèn)包中;3.怎樣設(shè)定權(quán)限其實(shí)從我們編寫第一個(gè)Java源程序開始,權(quán)限修飾符public就一直伴隨著我們。在Java中,有三個(gè)權(quán)限修飾符,分別是public、protected和private,這三個(gè)關(guān)鍵字都可以用于修飾方法和變量等,用來設(shè)置它們不同的訪問控制權(quán)限。除此之外,public還可以用來修飾接口和類。使用public修飾的公有類對(duì)所有類都是可見的,也就是說可以被同一個(gè)包中的類訪問,也可以被不同包中的類訪問。值得一提的是,在一個(gè).java文件中只能有一個(gè)公有類,且這個(gè)類(即主類)的名字必須與.java文件的名字相同,如果在一個(gè).java文件中有幾個(gè)類,但沒有公有類,則哪個(gè)類與.java文件的名字相同,哪個(gè)就是主類。三個(gè)修飾符public、protected、private形成了四種訪問權(quán)限。public修飾的成員能被所有類訪問;無修飾符時(shí),成員只能在包內(nèi)被訪問;protected修飾的成員除了在包內(nèi)有可見性外,在其它包中,只有這個(gè)類的才能訪問這些成員;private修飾的成員只能在類的內(nèi)部被訪問。假設(shè)這些修飾符修飾的成員在類1中,如圖6.3所示,圖6.3權(quán)限修飾符的作用域【解題思路】

任務(wù)6_3:1.定義一個(gè)名為Example3的類;2.在類的頂部進(jìn)行封裝;3.類的權(quán)限設(shè)置為無修飾符;4.這個(gè)名為Example6.java的文件要放在根目錄下名為package1的目錄中。【任務(wù)透析】//Example6_3.javapackagepackage1;classExample6_3{

public

static

voidmain(Stringargs[]){ System.out.println("helloworld!");}}圖6.4Example6_3.java的運(yùn)行結(jié)果【課堂提問】★什么是包,定義包有什么作用?★用protected修飾的成員與無修飾符修飾的成員有何不同?★同一個(gè).java文件可以有兩個(gè)類用public修飾嗎?為什么?【現(xiàn)場(chǎng)演練】定義兩個(gè)包a.b.c和x.y.z,在兩個(gè)包里分別有兩個(gè)類Class1和Class2,給Class2里的成員方法c2分別用public、protected、private權(quán)限修飾,或無權(quán)限修飾,試試Class1能否調(diào)用Class2里的成員方法?!局R(shí)鏈接】☆導(dǎo)入類類訪問同一個(gè)包中的其它類很容易實(shí)現(xiàn),但是如果要訪問其它包中的類,必須查找到被訪問到的類。有兩種方法可以完成。第一種方法是在每個(gè)類名前添加完成的包名,如:java.x.y.z.Class2c=newjava.x.y.z.Class2();很顯然,這種方法比較

溫馨提示

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