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

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

原文地址:https://www.cnblogs.com/Ming8006/p/6114604.html