java什么是類(lèi)的多態(tài)性
1. 如果a是類(lèi)A的一個(gè)引用,那么,a可以指向類(lèi)A的一個(gè)實(shí)例,或者說(shuō)指向類(lèi)A的一個(gè)子類(lèi)。
2. 如果a是接口A的一個(gè)引用,那么,a必須指向?qū)崿F(xiàn)了接口A的一個(gè)類(lèi)的實(shí)例。
多態(tài)(Polymorphism)按字面的意思就是“多種狀態(tài)”。在面向?qū)ο笳Z(yǔ)言中,接口的多種不同的實(shí)現(xiàn)方式即為多態(tài)。引用Charlie Calverts對(duì)多態(tài)的描述——多態(tài)性是允許你將父對(duì)象設(shè)置成為和一個(gè)或更多的他的子對(duì)象相等的技術(shù),賦值之后,父對(duì)象就可以根據(jù)當(dāng)前賦值給它的子對(duì)象的特性以不同的方式運(yùn)作(摘自“Delphi4 編程技術(shù)內(nèi)幕”)。簡(jiǎn)單的說(shuō),就是一句話:允許將子類(lèi)類(lèi)型的指針賦值給父類(lèi)類(lèi)型的指針。多態(tài)性在Object Pascal和C++中都是通過(guò)虛函數(shù)(Virtual Function) 實(shí)現(xiàn)的。
多態(tài)指同一個(gè)實(shí)體同時(shí)具有多種形式。它是面向?qū)ο蟪绦蛟O(shè)計(jì)(OOD)的一個(gè)重要特征。如果一個(gè)語(yǔ)言只支持類(lèi)而不支多態(tài),只能說(shuō)明它是基于對(duì)象的,而不是面向?qū)ο蟮?。C++中的多態(tài)性具體體現(xiàn)在運(yùn)行和編譯兩個(gè)方面。運(yùn)行時(shí)多態(tài)是動(dòng)態(tài)多態(tài),其具體引用的對(duì)象在運(yùn)行時(shí)才能確定。編譯時(shí)多態(tài)是靜態(tài)多態(tài),在編譯時(shí)就可以確定對(duì)象使用的形式。
C++中,實(shí)現(xiàn)多態(tài)有以下方法:虛函數(shù),抽象類(lèi),重載,覆蓋
java多態(tài)的實(shí)現(xiàn)主要體現(xiàn)在哪些方面
多態(tài)可分為:
1.編譯多態(tài):主要是體現(xiàn)在重載,系統(tǒng)在編譯時(shí)就能確定調(diào)用重載函數(shù)的哪個(gè)版本。
2.運(yùn)行多態(tài):主要體現(xiàn)在OO設(shè)計(jì)的繼承性上,子類(lèi)的對(duì)象也是父類(lèi)的對(duì)象,即上溯造型,所以子類(lèi)對(duì)象可以作為父類(lèi)對(duì)象使用,父類(lèi)的對(duì)象變量可以指向子類(lèi)對(duì)象。因此通過(guò)一個(gè)父類(lèi)發(fā)出的方法調(diào)用可能執(zhí)行的是方法在父類(lèi)中的實(shí)現(xiàn),也可能是某個(gè)子類(lèi)中的實(shí)現(xiàn),它是由運(yùn)行時(shí)刻具體的對(duì)象類(lèi)型決定的。