//java版
class A
{
     public static int i =10;
     public void show()
     {
     System.out.printf("%d\n",this.i);
     }
}
class B extends A
{
public void show()
{
//super.show();
System.out.println("BBBBB");
}
}
class M
{
     public static void main(String [] args)
     {
          A aa1 = new  A();
          aa1.show();//10
          B bb1 = new B();
          bb1.show();//BBBBB
          A aa2 = new B();
          aa2.show();//BBBBB
     }
}
//c#版  正常类方法
class Program
{
static void Main(string[] args)
{
A aa1 = new A();
aa1.show();//10
B bb1 = new B();
bb1.show();//BBBBB
A aa2 = new B();
aa2.show();//10
}
}
class A
{
public int i = 10;
public void show()
{
Console.WriteLine(i);
}
}
class B : A
{
public new void show()
{
//base.show();
Console.WriteLine("BBBBB");
}
}
//C#版 虚方法
class Program
{
static void Main(string[] args)
{
A aa1 = new A();
aa1.show();//10
B bb1 = new B();
bb1.show();//BBBBB
A aa2 = new B();
aa2.show();//BBBBB
}
}
class A
{
public int i = 10;
public virtual void show()
{
Console.WriteLine(i);
}
}
class B : A
{
public override void show()
{
//base.show();
Console.WriteLine("BBBBB");
}
}


java中无论是子 类还是父类,都只看实例化的是哪个类,然后调用的方法便是对应类的方法。子类实例若调用父类方法,可通过super关键字。

c#对于正常的类型继承来说,子类即便通过new覆盖父类方法,也只看声明的类型,然后调用方法。

对于虚方法(virtual),父类只提供默认的调用方法,子类override之后,则和java一样按照实例化的类型来选择调用的方法。