C 向上轉型

2021-06-21 03:33:24 字數 793 閱讀 4281

在學習c#的過程中,一些基礎知識比如資料型別、控制結構、陣列等都與之前接觸的語言大同小異,還能夠理解,但是向上轉型這個概念還是第一次遇到。

學習了一下後大致理解如下:

向上轉型就是將子類轉型成父類,物件可以作為它本身的型別使用。

先來看一段**:

public class animal

}public class bird : animal

}class test

}

上述例子中我們定義了乙個動物類(其中有吃東西的方法),鳥類繼承了動物類(重寫了基類中吃東西的方法),主函式中生命animal為animal型別的物件,但執行結果並不是我們預期的那樣,而是顯示「我是鳥,我要吃東西!」。

對於這個例子。宣告animal的時候,animal的型別為animal。但是animal所指向的例項為animal的子類即bird。

當然有向上轉型就有向下轉型,方式當然也是相反,即將父類轉換成子類。

在網上看到乙個問題,有人說「如果子類中所需要的功能在父類中存在,就使用向上轉型;如果父類所需要的功能在子類中存在,就使用向下轉型」,但是如上例所述,bird是animal的子類,bird已經繼承了animal中的方法,為什麼還要使用向下轉型呢?即為什麼定義animal的時候要用「animal animal=new bird();」而不是「bird animal=new bird();」呢?

懇請朋友們不吝賜教,提出寶貴的意見和建議。

C 向上轉型

類其實也是一種資料型別,也可以發生資料型別轉換,不過這種轉換只有在基類和派生類之間才有意義,並且只能將派生類賦值給基類,包括將派生類物件賦值給基類物件 將派生類指標賦值給基類指標 將派生類引用賦值給基類引用,這在 c 中稱為向上轉型 upcasting 相應地,將基類賦值給派生類稱為向下轉型 dow...

C 向上轉型

在 c c 中經常會發生資料型別的轉換,例如將 int 型別的資料賦值給 float 型別的變數時,編譯器會先把 int 型別的資料轉換為 float 型別再賦值 反過來,float 型別的資料在經過型別轉換後也可以賦值給 int 型別的變數。資料型別轉換的前提是,編譯器知道如何對資料進行取捨。例如...

C 向上轉型

在 c 中經常會發生資料型別的轉換,例如將 int 型別的資料賦值給 float 型別的變數時,編譯器會先把 int 型別的資料轉換為 float 型別再賦值 反過來,float 型別的資料在經過型別轉換後也可以賦值給 int 型別的變數。資料型別轉換的前提是,編譯器知道如何對資料進行取捨。例如 i...