在學習C#的過程中,一些基礎知識比如數據類型、控制結構、數組等都與之前接觸的語言大同小異,還能夠理解,但是向上轉型這個概念還是第一次遇到。
學習了一下後大致理解如下:
向上轉型就是將子類轉型成父類,對象可以作為它本身的類型使用。
先來看一段代碼:
public class Animal { public virtual void Eat() { Console.WriteLine("我是動物,我要吃東西!"); } } public class Bird : Animal { public override void Eat() { Console.WriteLine("我是鳥,我要吃東西!"); } } class Test { static void Main(string[] args) { Animal animal = new Bird(); //向上轉型 animal.Eat(); } }
上述例子中我們定義了一個動物類(其中有吃東西的方法),鳥類繼承了動物類(重寫了基類中吃東西的方法),主函數中生命animal為Animal類型的對象,但運行結果並不是我們預期的那樣,而是顯示“我是鳥,我要吃東西!”。
對於這個例子。聲明animal的時候,animal的類型為Animal。但是animal所指向的實例為Animal的子類即Bird。
當然有向上轉型就有向下轉型,方式當然也是相反,即將父類轉換成子類。
在網上看到一個問題,有人說“如果子類中所需要的功能在父類中存在,就使用向上轉型;如果父類所需要的功能在子類中存在,就使用向下轉型”,但是如上例所述,Bird是Animal的子類,Bird已經繼承了Animal中的方法,為什麼還要使用向下轉型呢?即為什麼定義Animal的時候要用“Animal animal=new Bird();”而不是“Bird animal=new Bird();”呢?
懇請朋友們不吝賜教,提出寶貴的意見和建議。