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();?

}

}

}

可以这么理解以上代码:

父类引用子类的实例> 鸟是动物吗? 当然鸟是动物,所以无须类型转换;

(现在程序将一只鸟装进了 放动物的黑箱子里)

现在有人问你这个黑箱子里的东西会吃东西吗??

这个黑箱子只能放动物,是动物就会吃东西,所以无须打开黑箱子看里面是什么,就能回答说它会吃东西。

现在又有人问你这个黑箱子里的动物能飞吗?

那么黑箱子的主人就不能直接回答问题了,因为箱子是黑的,上面只标识是动物,并不知道具体是什么动物,主人必须打开黑箱子看是不是鸟,如果是鸟才能回答说会飞。这就相当于强制转换。

-------

以上是个人理解。