C#和Java在重写上的区别

C#
     class
A { public string Get1() { return "A1"; } public virtual string Get2() { return "A2"; } } class B:A { public string Get1() //此处会出现提示:隐藏继承的成员“Program.A.Get1()”。如果是有意隐藏,请使用关键字 new { return "B1"; } public override string Get2() { return "B2"; } } static void Main(string[] args) { A a = new B(); Console.WriteLine(a.Get1()); //结果为A1,原因Get1()方法之间并没有形成重写,调用A的Get1()方法 Console.WriteLine(a.Get2()); //结果为B2,原因Get2()方法之间形成了重写,会调用B的方法 }

C#此段代码是能正常编译运行的,但是会出现警告提示。

另C#所有子父类方法的重写,必须在父方法上使用abstract,virtual等关键字修饰,且在子方法使用override关键字修饰。否则编译器则会视为不同的方法。

Java
    public class  A
    {
        public long Get()
        {
            return 4;
        }
    }

    public  class B extends A
    {
        public int Get()    //此处会出现错误提示,attempting to use incompatible return type,即“尝试使用不相容的返回类型”,可以看出对于同名同参方法,不管返回类型是否相同,编译器都会认为子类在尝试复写父类方法,这时会要求返回类型必须相同
        {
            return 5;
        }
    }

此段java代码编译不会通过

 

posted @ 2016-06-21 11:41  zhoushiya  阅读(634)  评论(0编辑  收藏  举报