public abstract class Animal { public abstract void ShowType(); } public class Bird : Animal { public string type = "Bird"; public override void ShowType() { Console.WriteLine("Type is {0}", type); } } public class Chicken : Bird { public string type = "Chicken"; public override void ShowType() { Console.WriteLine("Type is {0}", type); } }
当 Bird bird = new Chicken(); 时,
bird.Type是Bird,bird.ShowType输出是"Type is Chicken"
如果把上述代码Chicken Class中ShowType的方法由override改成new,则:
bird.Type是Bird,bird.ShowType输出是"Type is Bird"
为什么是这样?能给个详细的解释吗?网上搜了一些,没咋看明白
public new void ShowType() { Console.WriteLine("Type is {0}", type); }
Chicken Class中ShowType的方法由override改成new
public new??
是的
这个 继承,要明白他们的内存分配情况就好办了。
分析:
new Chicken();
现在成员有:
B_Type //B的字段
C_Type //C的字段
BC_ShowType //B的方法被C重写,即只有一个C的方法,BC共同所有
Bird bird = new Chicken(); //类型转换,只有B_Type和BC_ShowType 可以转换,C_Type是不能转的。
对bird的调用,你看看吧 。