與源代碼課程章抽象類(lèi)_第1頁(yè)
與源代碼課程章抽象類(lèi)_第2頁(yè)
與源代碼課程章抽象類(lèi)_第3頁(yè)
與源代碼課程章抽象類(lèi)_第4頁(yè)
與源代碼課程章抽象類(lèi)_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

李興華Java培訓(xùn)系列課程抽象類(lèi)本章學(xué)習(xí)目標(biāo)掌握繼承性的主要作用、實(shí)現(xiàn)、使用限制;掌握方法覆寫(xiě)的操作;掌握f(shuō)inal關(guān)鍵字的使用;掌握對(duì)象多態(tài)性的概念以及對(duì)象轉(zhuǎn)型的操作;掌握抽象類(lèi)和接口的定義、使用、常見(jiàn)設(shè)計(jì)模式;掌握Object類(lèi)的主要特點(diǎn)及實(shí)際應(yīng)用;掌握匿名內(nèi)部類(lèi)的使用;掌握基本數(shù)據(jù)類(lèi)型包裝類(lèi)的使用。抽象類(lèi)普通類(lèi)可以直接產(chǎn)生實(shí)例化對(duì)象,并且在普通類(lèi)之中可以包含有構(gòu)造方法、普通方法、static方法、常量、變量的內(nèi)容。而所謂的抽象類(lèi)就是指在普通類(lèi)的結(jié)構(gòu)里面增加抽象方法的組成部分,抽象方法指的是沒(méi)有方法體的方法,同時(shí)抽象方法還必須使用abstract關(guān)鍵字進(jìn)行定義。擁有抽象方法的類(lèi)一定屬于抽象類(lèi),抽象類(lèi)要使用abstract聲明。范例:定義抽象類(lèi)abstract

classA{ //定義一個(gè)抽象類(lèi),使用abstract聲明

public

voidfun(){ //普通方法 System.out.println("存在有方法體的方法!"); }

//此方法并沒(méi)有方法體的聲明,并且存在有abstract關(guān)鍵字,表示抽象方法

public

abstract

voidprint();}此時(shí)抽象類(lèi)已經(jīng)被成功的定義出來(lái),但是如果要想使用抽象類(lèi)則必須遵守如下原則:抽象類(lèi)必須有子類(lèi),即:每一個(gè)抽象類(lèi)一定要被子類(lèi)所繼承(使用extends關(guān)鍵字),但是在Java中每一個(gè)子類(lèi)只能夠繼承一個(gè)抽象類(lèi),所以具備有單繼承局限;抽象類(lèi)的子類(lèi)(子類(lèi)不是抽象類(lèi))必須覆寫(xiě)抽象類(lèi)之中的全部抽象方法(強(qiáng)制子類(lèi)覆寫(xiě));依靠對(duì)象的向上轉(zhuǎn)型概念,可以通過(guò)抽象類(lèi)的子類(lèi)完成抽象類(lèi)的實(shí)例化對(duì)象操作。范例:正確使用抽象類(lèi)abstract

classA{ //定義一個(gè)抽象類(lèi),使用abstract聲明

public

voidfun(){ //普通方法 System.out.println("存在有方法體的方法!"); }

//此方法并沒(méi)有方法體的聲明,并且存在有abstract關(guān)鍵字,表示抽象方法

public

abstract

voidprint();}//一個(gè)子類(lèi)只能夠繼承一個(gè)抽象類(lèi),屬于單繼承局限classBextendsA{ //B類(lèi)是抽象類(lèi)的子類(lèi),并且是一個(gè)普通類(lèi)

public

voidprint(){ //強(qiáng)制要求覆寫(xiě)的方法 System.out.println("HelloWorld!"); }}public

classTestDemo{

public

static

voidmain(Stringargs[]){ Aa=newB(); //向上轉(zhuǎn)型

a.print(); //被子類(lèi)所覆寫(xiě)過(guò)的方法 }}抽象類(lèi)的相關(guān)限制抽象類(lèi)里面由于會(huì)存在一些屬性,那么在抽象類(lèi)之中一定會(huì)存在構(gòu)造方法,目的:為屬性初始化,并且子類(lèi)對(duì)象實(shí)例化的時(shí)候依然滿足于先執(zhí)行父類(lèi)構(gòu)造,再調(diào)用子類(lèi)構(gòu)造的情況。抽象類(lèi)不能夠使用final定義:因?yàn)槌橄箢?lèi)必須有子類(lèi),而final定義的類(lèi)不能夠有子類(lèi);抽象類(lèi)中可以沒(méi)有任何抽象方法,但是只要是抽象類(lèi),那么依然不能夠直接使用關(guān)鍵字new實(shí)例化對(duì)象。抽象類(lèi)中依然可以定義內(nèi)部的抽象類(lèi),而實(shí)現(xiàn)的子類(lèi)也可以根據(jù)需要選擇是否定義內(nèi)部類(lèi)來(lái)繼承抽象內(nèi)部類(lèi)。外部抽象類(lèi)不允許使用static聲明,而內(nèi)部的抽象類(lèi)允許使用static聲明,使用static聲明的內(nèi)部抽象類(lèi)就相當(dāng)于是一個(gè)外部抽象類(lèi),繼承的時(shí)候使用“外部類(lèi).內(nèi)部類(lèi)”的形式表示類(lèi)名稱(chēng)。抽象類(lèi)中,如果定義有static屬性或方法的時(shí)候,都可以在沒(méi)有對(duì)象的時(shí)候直接調(diào)用。抽象類(lèi)應(yīng)用——模版設(shè)計(jì)模式現(xiàn)在假設(shè)有三類(lèi)現(xiàn)實(shí)的事物(或者是更多的事物):機(jī)器人(Robot):具備充電、工作兩個(gè)基本操作;人類(lèi)(Human):具備吃飯、工作、睡覺(jué)三個(gè)基本操作;豬(Pig):具備吃飯、睡覺(jué)兩個(gè)基本操作。范例:定義的是一個(gè)行為類(lèi)abstract

classAction{ //定義一個(gè)抽象的行為類(lèi),行為不是具體的

//定義常量時(shí)必須保證兩個(gè)內(nèi)容相加的結(jié)果不是其它行為,例如:EAT+SLEEP的結(jié)果為6不會(huì)和其它值沖突

public

static

final

int

EAT=1; //定義吃的命令

public

static

final

int

SLEEP=5; //定義睡的命令

public

static

final

int

WORK=7; //定義工作的命令

public

voidcommand(int

flag){

switch(flag){ //switch只支持?jǐn)?shù)值判斷,而if支持條件判斷

case

EAT: //當(dāng)前為吃的操作

this.eat();//調(diào)用子類(lèi)中具體的“吃”方法

break;

case

SLEEP: //當(dāng)前為睡的操作

this.sleep(); //調(diào)用子類(lèi)中具體的“睡”方法

break;

case

WORK: //當(dāng)前為工作的操作

this.work();//調(diào)用子類(lèi)中具體的“工作”方法

break;

case

EAT+WORK: //行為組合,本處只是舉例說(shuō)明,不演示

this.eat(); //調(diào)用“吃”的方法

this.work();//調(diào)用“工作”的方法

break; } }

public

abstract

voideat(); //定義子類(lèi)的操作標(biāo)準(zhǔn)

public

abstract

voidsleep(); //定義子類(lèi)的操作標(biāo)準(zhǔn)

public

abstract

voidwork(); //定義子類(lèi)的操作標(biāo)準(zhǔn)}范例:定義描述機(jī)器人的行為子類(lèi)classRobotextendsAction{ //定義機(jī)器人行為

public

voideat(){ //覆寫(xiě)行為的操作 System.out.println("機(jī)器人補(bǔ)充能量!"); }

public

voidsleep(){ //此操作不需要但必覆寫(xiě),所以方法體為空 }

public

voidwork(){ //覆寫(xiě)行為的操作 System.out.println("機(jī)器人正在努力工作!"); }}范例:定義人的類(lèi)classHumanextendsAction{ //定義人類(lèi)行為

public

voideat(){ //覆寫(xiě)行為的操作 System.out.println("人類(lèi)正在吃飯!"); }

public

voidsleep(){ //覆寫(xiě)行為的操作 System.out.println("人類(lèi)正在睡覺(jué)休息!"); }

public

voidwork(){ //覆寫(xiě)行為的操作 System.out.println("人為了夢(mèng)想在努力工作!"); }}范例:定義豬的類(lèi)classPigextendsAction{

public

voideat(){ //覆寫(xiě)行為的操作 System.out.println("豬正在啃食槽!"); }

public

voidsleep(){ //覆寫(xiě)行為的操作 System.out.println("豬在睡覺(jué)養(yǎng)膘!"); }

public

voidwork(){ //此操作不需要但必覆寫(xiě),所以方法體為空 }}范例:測(cè)試行為publicclassTestDemo{ publicstaticvoidmain(Stringargs[]){ fun(newRobot()); //傳遞機(jī)器人行為子類(lèi)

fun(newHuman()); //傳遞人類(lèi)行為子類(lèi)

fun(newPig()); //傳遞豬的行為子類(lèi)

} /** *執(zhí)行具體的操作行為,假設(shè)本處只執(zhí)行EAT、SLEEP、WORK三個(gè)行為 *@paramact具體的行為對(duì)象 */

publicstaticvoidfun(Actionact){ mand(Action.EAT); //調(diào)用“吃”操作

mand(Action.SLEEP); //調(diào)用“睡”操作

溫馨提示

  • 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)論