public class A
    {
        public void Run()
        {
            Console.WriteLine("父");
        }
    }
    public class B:A
    {
        public void Run()
        {
            Console.WriteLine("子");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            A a = new B();
            a.Run();
           
        }
    }为什么打印出的是"父"不是"子",能详细说明下吗?谢谢

解决方案 »

  1.   

    public class A 
        { 
            public virtual void Run() 
            { 
                Console.WriteLine("父"); 
            } 
        } 
        public class B:A 
        { 
            public override void Run() 
            { 
                Console.WriteLine("子"); 
            } 
        } 
        class Program 
        { 
            static void Main(string[] args) 
            { 
                A a = new B(); 
                a.Run(); 
              
            } 
        } 
    这样就能达到你要的效果了。
    多看看面向对象的书吧
      

  2.   

    那么简单。A a = new B(); 
    这里你理解了没,?先看new 的是什么,
    你这里new B()说明对象就A+B的内容。A a=new B();看前面的是A a;
    说明访问权限是A类的,所以a.run()是A类的方法,如果你想访问子类的也可以。用“多态”吧。就是 override
      

  3.   

    3楼说得很对,虽然B继承了A,但是B并没有对A的方法进行重写