版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國地毯行業(yè)市場(chǎng)發(fā)展趨勢(shì)及投資需求預(yù)測(cè)報(bào)告
- 2024-2030年中國回程車輛行業(yè)供需狀況發(fā)展戰(zhàn)略規(guī)劃分析報(bào)告
- 2024-2030年中國售電公司行業(yè)未來發(fā)展創(chuàng)新調(diào)研規(guī)劃研究報(bào)告
- 2024年版權(quán)許可與內(nèi)容分發(fā)合同
- 湄洲灣職業(yè)技術(shù)學(xué)院《特殊學(xué)校教材教法》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年某科技公司與某游戲公司關(guān)于游戲開發(fā)的合同
- 中國速滑“勞?!表n梅笑談冬奧
- 呂梁學(xué)院《信息界面設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年度結(jié)婚典禮拍攝合同
- 2024年標(biāo)志性樓頂LED燈光字安裝制作合作協(xié)議版B版
- 2024年輔導(dǎo)員年終總結(jié)
- GB/T 44811-2024物聯(lián)網(wǎng)數(shù)據(jù)質(zhì)量評(píng)價(jià)方法
- 2024年國家開放大學(xué)本科《知識(shí)產(chǎn)權(quán)法》第一至四次形考任務(wù)試題及答案
- 母乳喂養(yǎng)課件(共68張課件)課件
- 2025年教師資格考試初級(jí)中學(xué)面試信息技術(shù)試題及解答參考
- 工傷調(diào)解簡(jiǎn)單協(xié)議書范本(35篇)
- 人工智能學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 物業(yè)公司疫情處理應(yīng)急預(yù)案
- 《基礎(chǔ)會(huì)計(jì)第6版》中高職全套教學(xué)課件
- DBJ04∕T 411-2020 城市軌道交通設(shè)施設(shè)備分類編碼標(biāo)準(zhǔn)
- 肺癌根治術(shù)護(hù)理查房
評(píng)論
0/150
提交評(píng)論