override 与 new--009好汉

问题:
  1.     什么是override与new?
  2.    两者不同?
  3.   为什么要出现两者?
解答:
     第一部分:
  1. 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:还更深入内容待各位加入 
posted @ 2013-10-21 22:31  火影jia  阅读(129)  评论(0编辑  收藏  举报