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();?
}
}
}
可以这么理解以上代码:
父类引用子类的实例> 鸟是动物吗? 当然鸟是动物,所以无须类型转换;
(现在程序将一只鸟装进了 放动物的黑箱子里)
现在有人问你这个黑箱子里的东西会吃东西吗??
这个黑箱子只能放动物,是动物就会吃东西,所以无须打开黑箱子看里面是什么,就能回答说它会吃东西。
现在又有人问你这个黑箱子里的动物能飞吗?
那么黑箱子的主人就不能直接回答问题了,因为箱子是黑的,上面只标识是动物,并不知道具体是什么动物,主人必须打开黑箱子看是不是鸟,如果是鸟才能回答说会飞。这就相当于强制转换。
-------
以上是个人理解。