簡單的理解:
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 介面,該怎麼寫才能確定強制轉換後的型別是實現了該介面呢?後來無奈看了...