版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年酒店管理崗位面試筆試題目及答案參考
- 2026年化工安全技術(shù)與工藝標(biāo)準(zhǔn)化實(shí)施測(cè)試題
- 2026年安全事故責(zé)任追究與處罰措施試題集
- 2026年財(cái)務(wù)分析師財(cái)務(wù)報(bào)表分析與投資決策技巧筆試題
- 2026年產(chǎn)品開(kāi)發(fā)流程中質(zhì)量管理的實(shí)操題目
- 2025年房地產(chǎn)項(xiàng)目營(yíng)銷(xiāo)策略與執(zhí)行手冊(cè)
- 2025年39環(huán)境保護(hù)項(xiàng)目評(píng)估與實(shí)施方案制定服務(wù)合同
- 生態(tài)景觀小品設(shè)計(jì)方案
- 舊家具翻新與再利用方案
- 公路施工隊(duì)伍招募與管理方案
- 《廣州天河商圈》課件
- H31341 V2.5 HCIP-TranSmission 傳輸網(wǎng)練習(xí)試題及答案
- 2024年10月自考03291人際關(guān)系學(xué)試題及答案
- 下肢靜脈曲張課件
- (高清版)DZT 0428-2023 固體礦產(chǎn)勘查設(shè)計(jì)規(guī)范
- XXX縣村鎮(zhèn)空氣源熱泵區(qū)域集中供熱項(xiàng)目可行性研究報(bào)告
- 湖州昆侖億恩科電池材料有限公司年產(chǎn)40000噸鋰離子電池電解液項(xiàng)目環(huán)境影響報(bào)告
- 幼兒園班級(jí)體弱兒管理總結(jié)
- 肥胖患者圍術(shù)期麻醉管理
- 核酸印跡與分子雜交
- 金屬罐三片罐結(jié)構(gòu)分析
評(píng)論
0/150
提交評(píng)論