更新時(shí)間:2019-08-19 15:58:56 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽8470次
本篇文章給大家?guī)?lái)的內(nèi)容是什么是java多態(tài) ?java多態(tài)的使用,通過(guò)游戲中的一些功能帶你掌握多態(tài)的使用。下面由動(dòng)力節(jié)點(diǎn)java學(xué)院小編為大家一一介紹什么是java多態(tài)及java多態(tài)的使用。希望對(duì)大家有幫助。
為什么要使用多態(tài)
在一款對(duì)戰(zhàn)類游戲中(如有雷同純屬巧合),有兩個(gè)不同的法師英雄:小喬、妲己。
兩個(gè)法師英雄的都有攻擊的方法,小喬的攻擊傷害為10,消耗魔法20。妲己的攻擊傷害為15,消耗魔法30。玩家可以操作兩個(gè)英雄進(jìn)行攻擊,下面看看實(shí)現(xiàn)的代碼。
父類-英雄:whyusepolymorphic.Hero.java

子類-小喬:whyusepolymorphic.LittleJoe.java

子類-妲己:whyusepolymorphic.Daji.java

玩家:whyusepolymorphic.Player.java

上面代碼完整的實(shí)現(xiàn)了要求中的功能,那我們知道英雄不可能就這幾個(gè),后期如果添加新的魔法英雄,傷害不一樣,怎么辦?
我們可以添加新的類,實(shí)現(xiàn)攻擊的方法,修改玩家類添加操作英雄的方法。這個(gè)方式可以完成 Hero 擴(kuò)展的需求,但是后面有更多的 Hero 添加進(jìn)來(lái),我們維護(hù)起來(lái)就不是那么方便了。
研究上面的代碼我們發(fā)現(xiàn),Player 類中的 play 方法的參數(shù)都是 Hero 類的子類,能否使用一個(gè) play(Hero hero) 方法操作所有的英雄?使用多態(tài)就能夠?qū)崿F(xiàn)這種優(yōu)化設(shè)計(jì)。
什么是多態(tài)
簡(jiǎn)明扼要,多態(tài)就是多種形態(tài)。在自然界中碳的多態(tài)就有石墨、鉆石等,剪這個(gè)動(dòng)作就有剪紙、剪頭發(fā)等。同一個(gè)操作,由于條件的不同,產(chǎn)生的結(jié)果也不同。
那么在程序中的多態(tài),就是指同一個(gè)引用類型,使用不同的實(shí)例而執(zhí)行不同的操作(父類引用指定子類對(duì)象 Hero h=new Daji();)。
如何實(shí)現(xiàn)多態(tài)
實(shí)現(xiàn)多態(tài)的步驟:
1.編寫(xiě)具有繼承關(guān)系的父類和子類
2.子類重寫(xiě)父類方法
3.使用父類的引用指向子類的對(duì)象
父類作為方法形參實(shí)現(xiàn)多態(tài)
使用多態(tài)優(yōu)化上面代碼
修改 Hero.java 添加攻擊的方法

兩個(gè)子類不用修改
修改玩家類 Player.java 將 play方法的參數(shù)設(shè)為父類

修改測(cè)試類

父類作為返回值實(shí)現(xiàn)多態(tài)
玩家購(gòu)買英雄使用多態(tài)實(shí)現(xiàn),購(gòu)買的方法有返回值,返回購(gòu)買后的英雄,父類作為返回值實(shí)現(xiàn)這個(gè)功能。
修改玩家類 Player.java 添加獲取英雄的方法

測(cè)試類

父類到子類的轉(zhuǎn)換
如果子類中有一些子類特有的方法,父類引用不能調(diào)用子類的特有的方法。
向 Daji.java 中添加一個(gè)方法 queenWorship

向 LittleJoe.java 中添加一個(gè)方法 dazzlingStar

在 Player.java 中添加 bigMove 方法

發(fā)現(xiàn)代碼 hero.dazzlingStar(); 報(bào)錯(cuò)
那么這個(gè)時(shí)候就需要將父類轉(zhuǎn)換為子類(強(qiáng)制類型轉(zhuǎn)換)

但是直接這樣寫(xiě)也會(huì)報(bào)錯(cuò),用 instanceof 運(yùn)算符可以保證不會(huì)轉(zhuǎn)換錯(cuò)誤
語(yǔ)法:

instanceof通常和強(qiáng)制類型轉(zhuǎn)換結(jié)合使用
修改 Player.java 中的 bigMove 方法

在 main 方法中編寫(xiě)測(cè)試代碼

以上就是什么是java多態(tài)?java多態(tài)的使用的詳細(xì)內(nèi)容,希望能對(duì)大家的學(xué)習(xí)有所幫助。更多相關(guān)內(nèi)容請(qǐng)關(guān)注動(dòng)力節(jié)點(diǎn)java學(xué)院官網(wǎng),每天會(huì)有精彩內(nèi)容等你來(lái)看。
以上內(nèi)容相關(guān)免費(fèi)視頻教程下載:
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)