VR開(kāi)發(fā)入門(mén)教程24:面向對(duì)象之多態(tài)
來(lái)源:
奇酷教育 發(fā)表於:
多態(tài)多態(tài)(polymorphism)即一個(gè)名字具有多種語義。在面向對(duì)象中指一個(gè)方法可以有多種實(shí)現(xiàn)版本。類(lèi)的多態(tài)表現(xiàn)為方法的多態(tài),方法的多態(tài)主要有
多態(tài)
多態(tài)(polymorphism)即一個(gè)名字具有多種語義。在面向對(duì)象中指一個(gè)方法可以有多種實(shí)現(xiàn)版本。類(lèi)的多態(tài)表現(xiàn)為方法的多態(tài),方法的多態(tài)主要有重載(overload)和覆蓋(override)。
重載是同一個(gè)類(lèi)中,有多個(gè)方法同名,但是參數(shù)列表不同
參數(shù)列表不同:
1.參數(shù)的個(gè)數(shù)不相同
2.參數(shù)的類(lèi)型不同
3.參數(shù)的次序不同
注意:返回值類(lèi)型不同無(wú)法確定重載
覆蓋(重寫(xiě))是子類(lèi)中定義了父類(lèi)同名方法,且參數(shù)列表和返回值相同
1.父子類(lèi)內(nèi)部
2.父類(lèi)的方法virtual修飾一下 形成虛方法或者為抽象方法:abstract修飾
3.子類(lèi)中的方法務(wù)必和父類(lèi)的方法同名 override關(guān)鍵字修飾一下
4.其他的通通一樣(訪(fǎng)問(wèn)修飾符 修飾符 返回值類(lèi)型 參數(shù)列表)
編譯時(shí)多態(tài)
同名方法構(gòu )成重載的條件
參數(shù)列表不同(包括參數(shù)的個(gè)數(shù)、類(lèi)型、不同類(lèi)型參數(shù)的順序),方法的返回值不能構(gòu )成重載的條件
靜態(tài)聯(lián)編(靜態(tài)多態(tài)性)
它是C#的編譯時(shí)特性。即在編譯用戶(hù)的程序代碼時(shí)就將對(duì)某一方法的調(diào)用與對(duì)應(yīng)的具體方法體相互聯(lián)繫起來(lái),生成最終的程序代碼
同名的方法由於參數(shù)列表不同,在編譯時(shí)就可以根據(jù)調(diào)用方法的形式確定到底執(zhí)行哪個(gè)方法的代碼,因此這種方法的同名是允許的
運(yùn)行時(shí)多態(tài)
同名方法構(gòu )成覆蓋的條件:
1、方法分別在父、子類(lèi)中定義
2、父類(lèi)中的方法用virtual修飾
3、子類(lèi)中的方法用override修飾
4、同名 同參 同返回值類(lèi)型
運(yùn)行時(shí)多態(tài)性是C#的運(yùn)行時(shí)的特性。即在編譯用戶(hù)的程序代碼時(shí)不將對(duì)某一方法的調(diào)用與對(duì)應(yīng)的具體方法體相互聯(lián)繫起來(lái),而是在執(zhí)行過(guò)程中依據(jù)對(duì)象的實(shí)際類(lèi)型相應(yīng)地生成對(duì)該對(duì)象所在類(lèi)中的方法最終調(diào)用的程序代碼。
由於調(diào)用方法的引用可能指向父類(lèi)或子類(lèi)的對(duì)象(見(jiàn)上轉(zhuǎn)型對(duì)象),因此可以根據(jù)“是誰的對(duì)象就調(diào)用誰的方法”的原則確定調(diào)用同名方法中的哪一個(gè),因此在父、子類(lèi)中定義同名、甚至參數(shù)列表相同的方法是允許的。當(dāng)然,確定調(diào)用方法的引用指向父類(lèi)還是子類(lèi)的對(duì)象在編譯時(shí)無(wú)法完成,只能在運(yùn)行時(shí)確定。
重載和覆蓋的區(qū)別
從方法聲明角度:重載的兩(liǎng)個(gè)函數(shù)參數(shù)列表不同;覆蓋的兩(liǎng)個(gè)方法參數(shù)列表和返回值相同
從所處位置角度:重載的兩(liǎng)個(gè)方法在同一類(lèi)中;覆蓋的兩(liǎng)個(gè)方法在有繼承關(guān)係的兩(liǎng)個(gè)類(lèi)中
從方法調(diào)用角度:重載的方法被同一對(duì)象使用不同的參數(shù)調(diào)用;覆蓋的方法被不同對(duì)象使用相同參數(shù)調(diào)用。從多態(tài)時(shí)機(jī)角度:重載的方法在編譯時(shí)多態(tài);覆蓋的方法在運(yùn)行時(shí)多態(tài)。