C#和Java在重写上的区别

Posted zhoushiya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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代码编译不会通过

 

以上是关于C#和Java在重写上的区别的主要内容,如果未能解决你的问题,请参考以下文章

C#简述override和overload的区别

Java中重载(Overload)和重写(Override)的定义

C#中virtual和abstract的区别

C#中virtual 方法和abstract方法的区别

C#中virtual和abstract的区别

c#基础-19.重写(override)和覆盖(new)的区别