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