C 關於基類是否可以強制轉換為其派生類

2021-09-21 18:07:43 字數 1601 閱讀 2567

簡單的理解:

1、可以將乙個派生類隱式的賦值給其基類

2、無法將乙個基類強制轉換為派生類,但一種情況例外,如果基類是由目標派生類或者目標派生類的派生類(即子類的子類)實現的則可以強制的將這個基類轉換為對應的派生類。

例如:對於mybmwcar類繼承至 mycar類,mycar類繼承至myobject類

a、將乙個派生類隱式的賦值給其基類

mybmwcar bmwcar = new mybmwcar();

mycar car = bmwcar;

myobject obj = car; //或者myobject obj = bmwcar;

b、無法將乙個基類強制轉換為派生類

myobject obj = new myobject();

mycar car = (mycar)obj;//無法實現

mybmwcar bmwcar = (bmwcar)obj;//無法實現

例外 :基類是由目標派生類或者目標派生類的派生類(即子類的子類)實現的

myobject obj = new mycar();

mycar car = (mycar)obj;//可以實現

//但是,以下情況是不可以的

mybmwcar bmwcar = (bmwcar)obj;//無法實現,這句話等同於mybmwcar bmwcar = (bmwcar)car;已經說了無法將乙個基類強制轉換為派生類

或者

myobject obj = new mybmwcar();

mycar car = (mycar)obj;//可以實現

mybmwcar bmwcar = (bmwcar)obj;//可以實現,這句話等同於mybmwcar bmwcar = (bmwcar)car;

為什麼?

在上面b例子中,看似將基類強制轉換成了派生類,但實質是基類obj指向的是乙個派生類物件,例如我們把b的第二個例子這樣看也許就明白了,我們將myobject obj = new mycar();這句**換種方式表達:

mycar carobj = new mycar();

myobject obj = carobj;//將乙個派生類賦值給基類

mycar car = (mycar)obj;//同級強制轉換可以實現,但這其實是多餘的操作

//但是,以下情況還是不可以的

mybmwcar bmwcar = (bmwcar)obj;//無法實現,這句話等同於mybmwcar bmwcar = (bmwcar)car;已經說了無法將乙個基類強制轉換為派生類

C 派生類強制轉換為基類

在多型的使用時,派生類的指標或引用能夠轉換為基類的指標或引用,即 基類的指標 能夠指向 派生類的基類部分 base b derived d b和d指向的內容是相等的,b d,由於之間有乙個隱式轉換即 b base d b和d的位址是不同的int b int d 由於b指向d的基類部分,d指向的是完整...

c 派生類轉換為基類的意義

由於這段時間一直糾結於c 繼承的一些小問題,所以把這段時間的收穫寫下。如下 using system using system.collections.generic namespace x class baima ma static void main 書上有這樣一句話 派生類物件允許轉換為基類物...

呵呵原來類也可以強制轉換為介面型別的啊呵呵

今天老師讓我們自己編寫類,實現和arrays.sort object obj 一樣 的功能,剛開始怎麼也想不明白,那也不知道具體的類是什麼,要強制轉換 object類強製成什麼型別的呢?用sort方法的類都要實comparable 介面,該怎麼寫才能確定強制轉換後的型別是實現了該介面呢?後來無奈看了...