//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一样按照实例化的类型来选择调用的方法。
转载于:https://blog.51cto.com/smartwang/1362810