class A
{
   public f(){}
}
class B:A
{
   public f(){}
}
class Show
{
    static void Main()
    {
         A a=new B();
         a.f();
     }
}大家知道会调用A类的方法。在JAVA中这是多态,会调用B类的方法,.NET中非得要在两个函数上加关键字才能表示多态,才会调用B类方法,但不做改动时候,.NET又支持这种写法,难道仅仅是为了不实列化A类对象?有什么用吗?

解决方案 »

  1.   

    我没有学过JAVA,但在C#,C++里f()在虚函数表里没有,不会调用B里面的函数的,不会后期绑定
      

  2.   

    class A
    {
      public void f()
      {
        System.Console.WriteLine("A");
      }
    }class B:A
    {
      public new void f()
      {
        System.Console.WriteLine("B");
      }
    }class Show
    {
      static void Main()
      {
        A a = new B();
        a.f();
        ((B)a).f();
      }
    }/* 程序输出:
    A
    B因为 a 是 A, 所以 a.f() 调用的是 A 类的方法;
    a 转型为 B 后,((B)a).f() 调用的就是 B 类的方法了。
    */
      

  3.   

    class A
    {
       virtaul public f(){}
    }
    class B:A
    {
       public overrider f(){}
    }
      

  4.   

    class A
    {
      public virtual void f()
      {
        System.Console.WriteLine("A");
      }
    }class B : A
    {
      public override void f()
      {
        System.Console.WriteLine("B");
      }
    }class Show
    {
      static void Main()
      {
        (new A()).f();
        A a = new B();
        a.f();
        ((B)a).f();
      }
    }// 请想一下程序的输出是什么?