Java什么是多態(tài)?多態(tài)的作用有哪些

Java什么是多態(tài)?多態(tài)的作用有哪些

天津卓眾教育      2022-04-15 15:28:01     16

Java什么是多態(tài)?多態(tài)的作用有哪些,我們都知道面向?qū)ο笥兴膫€(gè)基本特性:抽象、封裝、繼承、多態(tài)。這四個(gè)特性,概括起來可以這么理解,抽象、封裝、繼承是多態(tài)的基礎(chǔ)

課程價(jià)格 請咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

我們都知道面向?qū)ο笥兴膫€(gè)基本特性:抽象、封裝、繼承、多態(tài)。這四個(gè)特性,概括起來可以這么理解,抽象、封裝、繼承是多態(tài)的基礎(chǔ),多態(tài)是抽象、封裝、繼承的表現(xiàn)。多態(tài),是Java中非常重要的一個(gè)部分,所以今天來談一下多態(tài)(Polymorphism)。

什么是多態(tài)

不同類的對象對同一消息作出不同的響應(yīng)就叫做多態(tài)。就像上課鈴響了,上體育課的學(xué)生跑到操場上站好,上語文課的學(xué)生在教室里坐好一樣。

多態(tài)的作用

簡單講就是解耦。再詳細(xì)點(diǎn)講就是,多態(tài)是設(shè)計(jì)模式的基礎(chǔ),不能說所有的設(shè)計(jì)模式都使用到了多態(tài),但是23種中的很大一部分,都是基于多態(tài)的。

多態(tài)存在的三個(gè)條件

1、有繼承關(guān)系

2、子類重寫父類方法

3、父類引用指向子類對象

補(bǔ)充一下第二點(diǎn),既然多態(tài)存在必須要有“子類重寫父類方法”這一條件,那么以下三種類型的方法是沒有辦法表現(xiàn)出多態(tài)特性的(因?yàn)椴荒鼙恢貙懀?/p>

1、static方法,因?yàn)楸籹tatic修飾的方法是屬于類的,而不是屬于實(shí)例的

2、final方法,因?yàn)楸籪inal修飾的方法無法被子類重寫

3、private方法和protected方法,前者是因?yàn)楸籶rivate修飾的方法對子類不可見,后者是因?yàn)楸M管被protected修飾的方法可以被子類見到,也可以被子類重寫,但是它是無法被外部所引用的,一個(gè)不能被外部引用的方法,怎么能談多態(tài)呢

多態(tài)的分類

1、編譯時(shí)多態(tài),即方法的重載,從JVM的角度來講,這是一種靜態(tài)分派(static dispatch)

2、運(yùn)行時(shí)多態(tài),即方法的重寫,從JVM的角度來講,這是一種動(dòng)態(tài)分派(dynamic dispatch)

關(guān)于這一點(diǎn),在寫到JVM的時(shí)候會(huì)詳細(xì)講到。

分析多態(tài)問題的幾條原則

如果不去理解多態(tài)的原理,就從使用的角度來講,以個(gè)人的學(xué)習(xí)、工作這幾年的經(jīng)驗(yàn),總結(jié)出了多態(tài)無非就是三句話:

比如我們有一個(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()是無法編譯通過的,必須要Children c=(Children)new Father(),讓父類知道它要轉(zhuǎn)成具體哪個(gè)子類

3、父類引用指向子類對象,子類重寫了父類的方法,調(diào)用父類的方法,實(shí)際調(diào)用的是子類重寫了的父類的該方法。即Father f=new Children(),f.toString()實(shí)際上調(diào)用的是Children中的toString()方法

以上就是天津卓眾教育java培訓(xùn)機(jī)構(gòu)的小編針對“Java什么是多態(tài)?多態(tài)的作用有哪些”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

培訓(xùn)啦提醒您:交易時(shí)請核實(shí)對方資質(zhì),對于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。