• 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

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

  • 相关阅读:
    流畅的python,Fluent Python 第十章笔记
    foo
    std140
    android 开发注意事项
    Android ABI
    mac 基本
    build automation software 自动构建工具
    修改环境变量
    hyphenation
    Latency
  • 原文地址:https://www.cnblogs.com/Ming8006/p/6114604.html
Copyright © 2020-2023  润新知