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