古詩詞大全網 - 古詩大全 - c# 父類引用指向子類的實例為什麽需要強制類型轉換 子類裏面既然已經有父類的東西了 而且父類也只能

c# 父類引用指向子類的實例為什麽需要強制類型轉換 子類裏面既然已經有父類的東西了 而且父類也只能

“c# 父類引用指向子類的實例為什麽需要強制類型轉換?”

c# 父類引用指向子類的實例並不需要強制類型轉換。

當父類引用子類的實例後,如果需要使用子類特有的方法時才需要強制類型轉換。

舉例:

namespace?answer160429

{

class?Animal

{

public?void?Eat()?{?}

}

//子類,繼承父類Animal

class?Bird?:?Animal

{

public?void?Fly()?{?}

}

class?Program

{

static?void?Main(string[]?args)

{

Animal?animal1;

Bird?bird1?=?new?Bird();

//父類引用指向子類的對象並不需要強制轉換

animal1?=?bird1;

//但是此時animal1不能使用Bird的方法,只能使用Animal的方法

animal1.Eat();

//?如果要使用Bird的方法,必須要進行類型轉換;

((Bird)animal1).Fly();?

}

}

}

可以這麽理解以上代碼:

父類引用子類的實例> 鳥是動物嗎? 當然鳥是動物,所以無須類型轉換;

(現在程序將壹只鳥裝進了 放動物的黑箱子裏)

現在有人問妳這個黑箱子裏的東西會吃東西嗎??

這個黑箱子只能放動物,是動物就會吃東西,所以無須打開黑箱子看裏面是什麽,就能回答說它會吃東西。

現在又有人問妳這個黑箱子裏的動物能飛嗎?

那麽黑箱子的主人就不能直接回答問題了,因為箱子是黑的,上面只標識是動物,並不知道具體是什麽動物,主人必須打開黑箱子看是不是鳥,如果是鳥才能回答說會飛。這就相當於強制轉換。

-------

以上是個人理解。