更新時(shí)間:2020-09-14 16:55:55 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽6700次
我們都知道面向?qū)ο笥兴膫€(gè)基本特性:抽象、封裝、繼承、多態(tài)。這四個(gè)特性,概括起來(lái)可以這么理解,抽象、封裝、繼承是多態(tài)的基礎(chǔ),多態(tài)是抽象、封裝、繼承的表現(xiàn)。多態(tài),是Java中非常重要的一個(gè)部分,所以今天來(lái)談一下多態(tài)(Polymorphism)。

什么是多態(tài)
不同類的對(duì)象對(duì)同一消息作出不同的響應(yīng)就叫做多態(tài)。就像上課鈴響了,上體育課的學(xué)生跑到操場(chǎng)上站好,上語(yǔ)文課的學(xué)生在教室里坐好一樣。
多態(tài)的作用
簡(jiǎn)單講就是解耦。再詳細(xì)點(diǎn)講就是,多態(tài)是設(shè)計(jì)模式的基礎(chǔ),不能說(shuō)所有的設(shè)計(jì)模式都使用到了多態(tài),但是23種中的很大一部分,都是基于多態(tài)的。
多態(tài)存在的三個(gè)條件
1、有繼承關(guān)系
2、子類重寫父類方法
3、父類引用指向子類對(duì)象
補(bǔ)充一下第二點(diǎn),既然多態(tài)存在必須要有“子類重寫父類方法”這一條件,那么以下三種類型的方法是沒(méi)有辦法表現(xiàn)出多態(tài)特性的(因?yàn)椴荒鼙恢貙懀?/p>
1、static方法,因?yàn)楸籹tatic修飾的方法是屬于類的,而不是屬于實(shí)例的
2、final方法,因?yàn)楸籪inal修飾的方法無(wú)法被子類重寫
3、private方法和protected方法,前者是因?yàn)楸籶rivate修飾的方法對(duì)子類不可見(jiàn),后者是因?yàn)楸M管被protected修飾的方法可以被子類見(jiàn)到,也可以被子類重寫,但是它是無(wú)法被外部所引用的,一個(gè)不能被外部引用的方法,怎么能談多態(tài)呢
多態(tài)的分類
1、編譯時(shí)多態(tài),即方法的重載,從JVM的角度來(lái)講,這是一種靜態(tài)分派(static dispatch)
2、運(yùn)行時(shí)多態(tài),即方法的重寫,從JVM的角度來(lái)講,這是一種動(dòng)態(tài)分派(dynamic dispatch)
關(guān)于這一點(diǎn),在寫到JVM的時(shí)候會(huì)詳細(xì)講到。
分析多態(tài)問(wèn)題的幾條原則
如果不去理解多態(tài)的原理,就從使用的角度來(lái)講,以個(gè)人的學(xué)習(xí)、工作這幾年的經(jīng)驗(yàn),總結(jié)出了多態(tài)無(wú)非就是三句話:
比如我們有一個(gè)父類Father,有一個(gè)子類Children
1、向上轉(zhuǎn)型是自動(dòng)的。即Father f=new Children()是自動(dòng)的,不需要強(qiáng)轉(zhuǎn)
2、向下轉(zhuǎn)型要強(qiáng)轉(zhuǎn)。即Children c=new Father()是無(wú)法編譯通過(guò)的,必須要Children c=(Children)new Father(),讓父類知道它要轉(zhuǎn)成具體哪個(gè)子類
3、父類引用指向子類對(duì)象,子類重寫了父類的方法,調(diào)用父類的方法,實(shí)際調(diào)用的是子類重寫了的父類的該方法。即Father f=new Children(),f.toString()實(shí)際上調(diào)用的是Children中的toString()方法

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java什么是多態(tài)?多態(tài)的作用有哪些”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(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í)