码迷,mamicode.com
首页 > 编程语言 > 详细

C#和Java在重写上的区别

时间:2016-06-21 12:33:16      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

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代码编译不会通过

 

C#和Java在重写上的区别

标签:

原文地址:http://www.cnblogs.com/zhoushiya/p/5603103.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!