C# OOP技術(shù) 多態(tài)性
繼承的一個(gè)結(jié)果是派生于基類的類在方法和屬性上有一定的重疊,因此,可以使用相同的語(yǔ)法處理從同一個(gè)基類實(shí)例化的對(duì)象。例如,如果基類Animal有一個(gè)EatFoodO方法,則在其派生類Cow和Chicken中調(diào)用這個(gè)方法的語(yǔ)法是類似的:
Cow myCow = new Cow();
Chicken myChicken = new Chicken();
myCow.EatFood() ;
myChicken.EatFood() ;
多態(tài)性則推進(jìn)了一步??梢园涯硞€(gè)派生類型的變量賦給基本類型的變量,例如:
Animal myAnimal = myCow;
不需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,就可以通過(guò)這個(gè)變量調(diào)用基類的方法:
myAnimal.EatFood();
結(jié)果是調(diào)用派生類中的EatFoodO的實(shí)現(xiàn)代碼。注意,不能以相同的方式調(diào)用派生類上定義的方法。下面的代碼無(wú)法運(yùn)行:
myAnimal .Moo();
但可以把基本類型的變量轉(zhuǎn)換為派生類變量,調(diào)用派生類的方法,如下所示:
Cow myNewCow = (Cow)myAnimal;
myNewCow.Moo();
如果原始變量的類型不是Cbw或派生于Cbw的類型,這種強(qiáng)制類型轉(zhuǎn)換就會(huì)引發(fā)一個(gè)異常。
在派生于同一個(gè)類的不同對(duì)象上執(zhí)行任務(wù)時(shí),多態(tài)性是一種極有效的技巧,其使用的代碼最少。注意并不是只有共享同一個(gè)父類的類才能利用多態(tài)性。只要子類和孫子類在繼承層次結(jié)構(gòu)中有一個(gè)相同的類,它們就可以用同樣的方式利用多態(tài)性。
還要注意,在C#中,所有類都派生于同一個(gè)類object, object是繼承層次結(jié)構(gòu)中的根。所以可以把所有對(duì)象看成object類的實(shí)例。這就是在建立字符串時(shí),WriteLineO可以處理無(wú)數(shù)多種參數(shù)組合的原因。第一個(gè)參數(shù)后面的每個(gè)參數(shù)都可以看成一個(gè)object實(shí)例,所以可以把任何對(duì)象的輸出結(jié)果寫(xiě)到屏幕上。為此,需要調(diào)用方法ToStringCXobject的一個(gè)成員)。我們可以重寫(xiě)這個(gè)方法,為自己的類提供合適的實(shí)現(xiàn)代碼,或者使用默認(rèn)實(shí)現(xiàn)代碼,返回類名(根據(jù)它所在的名稱空間,返回類的限定名稱)。
點(diǎn)擊加載更多評(píng)論>>