重写父类的虚方法有什么作用呢?为什么要重写呢?
重写了以后就会把原来的父类中方法的实现都覆盖了这样重写有什么意思呢?搞不明白。

解决方案 »

  1.   

    执行看一下using System;
    using System.Collections.Generic;public class MyClass
    {
    public static void Main()
    {
    Base1 b1=new Base1();
    b1.DoSomething();
    Sub1 s1 = new Sub1();
    s1.DoSomething();
    Base1 bs1=new Sub1();
    bs1.DoSomething();

    Console.WriteLine("******************");

    Base2 b2 = new Base2();
    b2.DoSomething();
    Sub2 s2 = new Sub2();
    s2.DoSomething();
    Base2 bs2=new Sub2();
    bs2.DoSomething(); RL();
    }

    #region Helper methods private static void WL(object text, params object[] args)
    {
    Console.WriteLine(text.ToString(), args);
    }

    private static void RL()
    {
    Console.ReadLine();
    }

    private static void Break() 
    {
    System.Diagnostics.Debugger.Break();
    } #endregion
    }public class Base1
    {
    public virtual void DoSomething()
    {
    Console.WriteLine("From Base1 Execute Dosemething");
    }
    }public class Sub1 : Base1
    {
    public override void DoSomething()
    {
    Console.WriteLine("From Sub1 Execute Dosemething");
    }
    }public class Base2
    {
    public void DoSomething()
    {
    Console.WriteLine("From Base2 Execute Dosemething");
    }
    }public class Sub2 : Base2
    {
    public new void DoSomething()
    {
    Console.WriteLine("From Sub2 Execute Dosemething");
    }
    }
      

  2.   

    虚函数/方法是为了实现“多态”的效果,那什么叫多态呢? 
    给你举个例子吧:
      
      有一个基类:
    class Animal
    {
       ...
       virtual void Run(); // 虚函数,每个动物“跑”的方式不一样,有个体差异
    }class Leopard: Animal // 美洲豹
    {
       [virtual] void Run()
       {
          // 豹子跑的时候后面两只脚能准确的放到前面两个脚印里,这就是它的“不一样”。
       }
    }class Cock: Animal // 鸡
    {
       [virtual] void Run()
       {
          // 鸡只有两条腿,这就是它跑的“不一样”。
       }
    }class Dog: Animal // 狗
    {
       [virtual] void Run()
       {
          // 狗的跑。
       }
    }...  Other animals// 当你出门旅行去,你必定会遇到动物。所以我们需要定义一个动物的变量Animal* SomeAnimal;//1. 当你看到 Cock 的时候:
    SomeAnimal = new Cock();// 当你把鸡给赶跑了的时候, 鸡跑的动作发生了:
    SomeAnimal.Run(); // 注意,这就是多态发生的地方,它是调用的“鸡的跑”//2. 当你看到 Dog 的时候:
    SomeAnimal = new Dog();// 当你把Dog给赶跑了的时候, Dog跑的动作发生了:
    SomeAnimal.Run(); // 注意,这就是多态发生的地方,它是调用的“Dog的跑”//3. 当你遇到流氓的时候:
    SomeAnimal = new Gangster();// 当你把流氓给赶跑了的时候, 流氓跑的动作发生了:
    SomeAnimal.Run(); // 注意,这就是多态发生的地方,它是调用的“流氓的跑”...
    ...从上面你都可以看到,我们通过调用基类的虚函数,就达到了我们想要的效果——去根据具体情况做不同的事。
    这就是多态,它就是通过虚函数来实现的。现在,你应该对虚函数有概念了吧。
      

  3.   

    比如一个人的类(person)有一个的吃的方法(eat)。它可以派生出穷人,富人,好人,坏人各种子类。他们每个人都要吃,但是吃的内容,吃的姿势都不同,所以要重写吃这个方法才能显示每个子类的不同。重写并没有覆盖父类的方法。6楼的程序告诉你什么情况会调用父类的方法。
      

  4.   

    可以调父类的方法  父类a aa=new 父类a();
    调用子类的方法  父类a aa=new 子类();