- 相關(guān)推薦
關(guān)于Java的多態(tài)性
多態(tài)性有兩種:
1)編譯時(shí)多態(tài)性
對(duì)于多個(gè)同名方法,如果在編譯時(shí)能夠確定執(zhí)行同名方法中的哪一個(gè),則稱為編譯時(shí)多態(tài)性.
2)運(yùn)行時(shí)多態(tài)性
如果在編譯時(shí)不能確定,只能在運(yùn)行時(shí)才能確定執(zhí)行多個(gè)同名方法中的哪一個(gè),則稱為運(yùn)行時(shí)多態(tài)性.
方法覆蓋表現(xiàn)出兩種多態(tài)性,當(dāng)對(duì)象獲得本類實(shí)例時(shí),為編譯時(shí)多態(tài)性,否則為運(yùn)行時(shí)多態(tài)性,例如:
XXXX x1 = new XXXX(參數(shù)列表); //對(duì)象獲得本類實(shí)例,對(duì)象與其引用的實(shí)例類型一致
XXX xx1 = new XXX(參數(shù)列表);
x1.toString(); //編譯時(shí)多態(tài)性,執(zhí)行XXX類的方法.
xx1.toString(); //編譯時(shí)多態(tài)性,執(zhí)行XXXX類覆蓋的方法.
XXXX為XXX的父類.
由于子類對(duì)象既是父類對(duì)象,父類對(duì)象與子類對(duì)象之間具有賦值相容性,父類對(duì)象能夠被賦值為子類對(duì)象.例如,
XXXX x2 = new XXX(參數(shù)列表); //父類對(duì)象獲得子類實(shí)例,子類對(duì)象即是父類對(duì)象
x2.toString(); //運(yùn)行時(shí)多態(tài)
x2聲明為父類對(duì)象卻獲得子類XXX的實(shí)例,那么x2.toString()究竟執(zhí)行父類方法還是執(zhí)行子類覆蓋的方法呢?
這分為兩種情況:
取決于子類是否覆蓋父類方法.如果子類覆蓋父類方法,則執(zhí)行子類方法;
如果沒(méi)有覆蓋,則執(zhí)行父類方法.
在編譯時(shí),僅僅依據(jù)對(duì)象所屬的類,系統(tǒng)無(wú)法確定到底應(yīng)該執(zhí)行那個(gè)類的方法,只有運(yùn)行時(shí)才能確定,因此這是運(yùn)行時(shí)多態(tài).
父類對(duì)象并不能執(zhí)行所有的子類方法,只能執(zhí)行那些父類中聲明子類覆蓋的子類方法.
【Java的多態(tài)性】相關(guān)文章:
Java與Java web的區(qū)別09-30
淺談Java語(yǔ)言與Java 技術(shù)09-22
談Java語(yǔ)言與Java技術(shù)的介紹09-20
java教程之Java編程基礎(chǔ)09-12
Java與Java web有什么不同08-26
Java 繼承07-04
Java的類07-19
什么是Java09-20
java講解06-23