C#与Java多态方面的语法差异
2016-11-29
Java代码:
public static void main(String[] args) { Mother mother=new Mother(); mother.showName(); Mother human=new Son(); human.showName(); Son sona=new Son(); sona.showName(); } public class Mother { public void showName(){ System.out.println("妈妈"); } } public class Son extends Mother { public void showName(){ System.out.println("儿子"); } }
结果:
妈妈
儿子
儿子
C#代码:
class Program { public static void Main() { Mother mother = new Mother(); mother.ShowName(); Mother human = new Son(); human.ShowName(); Son sona = new Son(); sona.ShowName(); Console.Read(); } } public class Mother { public virtual void ShowName() { Console.WriteLine("妈妈"); } } public class Son : Mother { public override void ShowName() { Console.WriteLine("儿子"); } }
结果:
妈妈
儿子
儿子
但如果把override去了,将会出现一行警告,但编译器不会报错:
警告 1 “ConsoleApplication1.Son.ShowName()”隐藏了继承的成员“ConsoleApplication1.Mother.ShowName()”。如果是有意隐藏,请使用关键字 new
结果为:
妈妈
妈妈
儿子
结论:
由此证明,C#默认情况下是不支持多态的,子类默认情况下有个new关键字。C#若要实现多台需要在方法前添加virtual和override
另外,多态指的是方法,详情见 只有多态方法,没有多态实例字段