位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# OOP技術 多態(tài)性

提問人:劉團圓發(fā)布時間:2020-12-04

    繼承的一個結果是派生于基類的類在方法和屬性上有一定的重疊,因此,可以使用相同的語法處理從同一個基類實例化的對象。例如,如果基類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可以處理無數多種參數組合的原因。第一個參數后面的每個參數都可以看成一個object實例,所以可以把任何對象的輸出結果寫到屏幕上。為此,需要調用方法ToStringCXobject的一個成員)。我們可以重寫這個方法,為自己的類提供合適的實現(xiàn)代碼,或者使用默認實現(xiàn)代碼,返回類名(根據它所在的名稱空間,返回類的限定名稱)。

繼續(xù)查找其他問題的答案?

相關視頻回答
回復(0)
返回頂部