override 与 new--009好汉
问题:
- 什么是override与new?
- 两者不同?
- 为什么要出现两者?
解答:
第一部分:
- override(覆写)从字面上就要理解,覆盖了,新的盖住旧的,不再有旧的;要new为重载,重,多重,继保留了新的,也保留了旧的;
第二部分:
用代码要说明吧;
class Program
{
class bird
{
public void showType()
{
Console.WriteLine("bird");
}
public virtual void showClass()
{
Console.WriteLine("bird");
}
}
class chicken : bird
{
public new void showType()
{
Console.WriteLine("chicken");
}
public override void showClass()
{
Console.WriteLine("chicken");
}
}
static void Main(string[] args)
{
bird b = new chicken();
b.showType();
((chicken)b).showType();//注意与下面的比较
b.showClass();
((chicken)b).showClass();
}
}
输出:
分析,从语法中,override 要父类要为virtual或为abstract,而new 则不用,因为自己写自己的新函数,是不用理会别人的;但当我们用override时,干扰了父类,所为要有父类的同意,但真正原因,待补充;
从结果分析: b.showType() 与b.showClass() 输出的东西就不同了,为什么呢;其实因是new chicken();所以内存的分配, 是以chicken来分配的,所以函数表也一样;而 bird b = new chicken();中bird 的意义是控制了b 的访问权限,父类只访问父类,子类则可以访问部分public与protect的父类;
PS:还更深入内容待各位加入