首页 > 代码库 > C#与Java多态方面的语法差异

C#与Java多态方面的语法差异

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

另外,多态指的是方法,详情见 只有多态方法,没有多态实例字段

C#与Java多态方面的语法差异