A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王薪婷 中级黑马   /  2013-6-4 22:00  /  1809 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王薪婷 于 2013-6-4 23:56 编辑

OverloadOverride的区别是什么?Overloaded的方法是否可以改变返回值的类型?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
overload是重载:如果一个类中定义了多个同名方法,它们的参数个数或参数类型不同,其可以改变返回值的类型;
override是重写:如果在父类和子类中有相同名称和参数的方法,这个方法被重写。子类在调用这个方法时,将执行子类中该方法;

overload重载是一个类中多态性的一种表现,  override是父类与子类之间多态性的一种表现
回复 使用道具 举报
overload 重载: 是在同一类中,方法名相同,参数列表不同。

override  重写:   在子父类(接口)中,方法声明相同。方法声明包括(返回值类型 ,方法名 参数列表)

重载可以改变返回值类型,因为他跟返回值类型无关。
回复 使用道具 举报
本帖最后由 ccywhut 于 2013-6-5 20:12 编辑

overload重载:在同一访问区里的同名函数,它们的参数个数、参数类型或参数顺序不同(即参数列不同),程序根据不同的参数列来确定具体调用那个函数,重载不关心函数返回值类型,与返回值无关。
override是覆盖:子类重新定义的函数,它的函数名、返回值、参数列(参数个数、参数类型或参数顺序)必须与父类要覆盖的函数严格一致,子类在调用这个同名函数时,会调用子类的覆盖版本,不再调用父类被覆盖的函数。

C语言中就有重载,它只是一种语法规则,与多态没直接关系,主要是系统在编译时能确定调用重载函数的哪个版本,即是编译多态。

覆盖是多态的体现,面向对象核心就是多态。我们编程最多的就是父类、子类,继承、实现的关系,很多情况就是子类去覆盖(重写)父类方法。
下面是个小例子:
public class Test3
         {
  public static void main(String[] args) {}
       public void f1(int i){}
在其后加上下面方法中的任意一个。
1.编译无法通过,参数类型相同,只是把i换成j而已,还有就是改变了返回值类型,但重载不关心函数返回值类型,所以编译器认为是覆盖了上面的方法,而在同一个类JAVA是不允许的。
       public int f1(int z){}                 //1编译不通过,覆盖
       public int f1(int i,int j){}               //2重载
      public void f1(long i){}                //3重载


   


回复 使用道具 举报
overload(重载),override(重写)
区别:重载涉及同一个类中的同名方法,要求方法名相同参数列表不同,与返回值类型无关。
          重写涉及的是子类和父类之间的同名方法,要求方法名相同参数列表相同返回值类型相同或是其子类。

回复 使用道具 举报
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马