class Program
{
static void Main(string[] args)
{
Father objFather = new Son(); //Ok compiles
Son objSon1 = new Father(); //Comile time error : Cannot implicitly convert type
Son objSon = (Son)new Father(); //Run time error
Console.ReadLine();
}
}
class Father
{
public void Read()
{
}
}
class Daughter:Father
{
}
class Son:Father
{
}
任何人都能解释为什么会这样吗?记忆中发生了什么?
答案 0 :(得分:1)
你似乎误解了继承。
每个Daughter
和每个Son
都是Father
。这就是为什么你可以安全地将它们分配给Father
变量的原因。子类不能删除属性/方法只添加它们,这就是为什么它确定它始终有效。
但是如果你有一个Father
的实例并希望将其分配给Son
变量,那么你无法确定该实例是Son
并且实际上拥有所有需要的属性。 Father
实例也可能包含与Daughter
不兼容的Son
。这就是为什么编译器不能隐式转换它们,但作为程序员你可以明确地做它。