这不叫“隐藏”,要覆写用override是必须的。

解决方案 »

  1.   

    刚好反了在你的例子中public   void talk()////注意这一行其实规范的写法是:public new void talk()这是个talk方法一个新的签名。。也就是说,在Realman中,有两个talk签名。一个是Male.talk,一个是Realman.talk但是Realman.talk把Male.talk 隐藏了。所以:
    new Realman().talk 是调用 Realman.talk , 签名是Realman.talk而你可以尝试:((Male)new Realman()).talk 则调用 Male.talk,签名是Male.talk如果需要
    ((Male)new Realman()).talk 能调用Realman.talk
    那么必须定义为重写:public override void talk()那时((Male)new Realman()).talk调用的是 Realman.talk,而方法签名是 Male.talk
      

  2.   

    "现在看来,如果要实现多态性,不仅仅要在父类里面的方法声明为virtual,而且还要在子类里面相应的方法声明为override,将父类的方法进行“隐藏”"多态就是这样的,override 还是译为重载,覆盖比较好,new才是隐藏
      

  3.   

    同意:Lostinet(NeverCodeBehind)(迷失网络) 你把public   void talk()////注意这一行
    分别另上new 和override这两个关健字后运行试试就知道了。