书上说:一个父类a和子类b都有相同方法x(),类 b 的x()方法会隐藏父类方法,谁能举个例子说明如何隐藏啊? 另外:虚方法我已经理解了!
父类的中方法声明为virtual
子类的中与父类同名方法声明为override

解决方案 »

  1.   

    class 父类
    {
        public void 方法1()
        {
          Console.WriteLine("父类方法")
        }
    }
    class 子类:父类
    {
        public void 方法1()
        {
          Console.WriteLine("子类方法")
        }
    }
    这里如果声明子类的引用指向子类实例,就会执行子类方法
    class Test
    {
       static void Main()
       {
          子类 obj=new 子类();
          obj.方法1();
       }
    }
    上面输出"子类方法",这里是隐藏了父类的同名方法
    class Test
    {
       static void Main()
       {
          父类 obj=new 子类();
          obj.方法1();
       }
    }
    上面会输出"父类方法",没有重写父类方法
      

  2.   

    但是如果这样
    class 父类
    {
        public virtual void 方法1()
        {
          Console.WriteLine("父类方法")
        }
    }
    class 子类:父类
    {
        public override void 方法1()
        {
          Console.WriteLine("子类方法")
        }
    }这里如果声明子类的引用指向子类实例,就会执行子类方法
    class Test
    {
       static void Main()
       {
          子类 obj=new 子类();
          obj.方法1();
       }
    }
    上面输出"子类方法",这里是隐藏了父类的同名方法
    ---------------------------
    在父类方法加了virtual 
    在子类方法加了override
    也能体现上面的特性啊!?也是隐藏了父类的同名方法
      

  3.   

    虚方法体现面向对象的多态性,
    class 父类
    {
        public virtual void 方法1()
        {
          Console.WriteLine("父类方法")
        }
    }
    class 子类:父类
    {
        public override void 方法1()
        {
          Console.WriteLine("子类方法")
        }
    }这里如果声明子类的引用指向子类实例,就会执行子类方法
    class Test
    {
       static void Main()
       {
          父类 obj=new 子类();
          obj.方法1();
       }
    }
    这时候虽然obj是父类类型,但是会执行子类方法,
    但是如果不写virtual 和 override 就会执行父类方法,没有重写,所以叫隐藏