多態(tài)的三種表現(xiàn)形式 什么是多態(tài)?面向?qū)ο蟪绦蛟O(shè)計(jì)為什么要引入多態(tài)的特性?使用多態(tài)有什么優(yōu)點(diǎn)?
什么是多態(tài)?面向?qū)ο蟪绦蛟O(shè)計(jì)為什么要引入多態(tài)的特性?使用多態(tài)有什么優(yōu)點(diǎn)?多態(tài)性是多個(gè)狀態(tài)。例如,有一個(gè)超類(lèi),它有兩個(gè)子類(lèi),子類(lèi)1和子類(lèi)2。超類(lèi)有一個(gè)方法func(),它由兩個(gè)子類(lèi)重寫(xiě)。然后我們可以定義
什么是多態(tài)?面向?qū)ο蟪绦蛟O(shè)計(jì)為什么要引入多態(tài)的特性?使用多態(tài)有什么優(yōu)點(diǎn)?
多態(tài)性是多個(gè)狀態(tài)。
例如,有一個(gè)超類(lèi),它有兩個(gè)子類(lèi),子類(lèi)1和子類(lèi)2。
超類(lèi)有一個(gè)方法func(),它由兩個(gè)子類(lèi)重寫(xiě)。
然后我們可以定義一個(gè)超類(lèi)引用obj來(lái)指向一個(gè)子類(lèi)對(duì)象,比如超類(lèi)obj=new subclass 1();然后我們調(diào)用目標(biāo)函數(shù)當(dāng)使用()方法時(shí),它將被動(dòng)態(tài)綁定,即obj其實(shí)際類(lèi)型的func()方法,即子類(lèi)1的func()方法。
同樣,您可以編寫(xiě)超類(lèi)obj=new subclass 2();目標(biāo)函數(shù)()實(shí)際調(diào)用子類(lèi)2的func()方法。
由于子類(lèi)重寫(xiě)父類(lèi)的方法,然后指向引用父類(lèi)的子類(lèi)對(duì)象,所以調(diào)用方法時(shí)會(huì)進(jìn)行動(dòng)態(tài)綁定,稱(chēng)為多態(tài)性。
多態(tài)性在程序擴(kuò)展中起著非常重要的作用。例如,如果你想有一個(gè)子類(lèi)3,你需要改變很多少。如果使用配置文件,則可以保持源代碼不變。
多態(tài)有什么有什么作用?
多態(tài)性包括編譯時(shí)多態(tài)性和運(yùn)行時(shí)多態(tài)性。第一種是通過(guò)方法重載;第二種是通過(guò)方法覆蓋(覆蓋父方法的子類(lèi))。第一種是調(diào)用方法時(shí)不區(qū)分參數(shù)類(lèi)型,程序會(huì)自動(dòng)執(zhí)行相應(yīng)的方法,比如加法運(yùn)算,可以加int或double,都是相同的方法名。第二種是動(dòng)態(tài)綁定。當(dāng)使用父類(lèi)引用指向子類(lèi)對(duì)象,然后調(diào)用父類(lèi)中的方法時(shí),不同的子類(lèi)將顯示不同的結(jié)果。這樣的功能具有極好的可擴(kuò)展性。如果你玩過(guò)網(wǎng)絡(luò)游戲,你應(yīng)該知道游戲中有不同的角色。它們都有一個(gè)父類(lèi)。當(dāng)他們做同樣的動(dòng)作時(shí),效果會(huì)不同。例如,跑步、巫師跑步和士兵跑步將不一樣。這是因?yàn)樗鼈兌己w了父類(lèi)的運(yùn)行方法,并且每個(gè)方法都有自己的實(shí)際情況,表現(xiàn)出多態(tài)性。如果有一天您想添加另一個(gè)角色,只需編寫(xiě)另一個(gè)類(lèi)來(lái)繼承父類(lèi)并覆蓋正在運(yùn)行的方法。其他代碼不需要修改,所以可維護(hù)性也很好。這是一個(gè)小程序,也許你沒(méi)有意識(shí)到多態(tài)性的強(qiáng)度效應(yīng)。事實(shí)上,當(dāng)談到多態(tài)性時(shí),它是面向接口的編程。它與特定的類(lèi)無(wú)關(guān)。例如,如果不使用多態(tài)性,如果不實(shí)例化對(duì)象,則需要更新它。如果那天你改變了要求怎么辦?是不是又要換了?這是不好的,所以可以使用多態(tài)性來(lái)提出那些需要相似的,然后繼承它們。這樣,你需要在將來(lái)擴(kuò)展,而你只是繼承。很簡(jiǎn)單。我們需要看一下代碼才能更深入地理解它。有一個(gè)問(wèn)題正在討論中。