黑马程序员技术交流社区

标题: Overload和Override的区别是什么? [打印本页]

作者: 王薪婷    时间: 2013-6-4 22:00
标题: Overload和Override的区别是什么?
本帖最后由 王薪婷 于 2013-6-4 23:56 编辑

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


作者: 山鹰    时间: 2013-6-4 22:28
overload是重载:如果一个类中定义了多个同名方法,它们的参数个数或参数类型不同,其可以改变返回值的类型;
override是重写:如果在父类和子类中有相同名称和参数的方法,这个方法被重写。子类在调用这个方法时,将执行子类中该方法;

overload重载是一个类中多态性的一种表现,  override是父类与子类之间多态性的一种表现
作者: j816326    时间: 2013-6-4 22:39
overload 重载: 是在同一类中,方法名相同,参数列表不同。

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

重载可以改变返回值类型,因为他跟返回值类型无关。

作者: ccywhut    时间: 2013-6-4 23:10
本帖最后由 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重载


   



作者: 穆爱明    时间: 2013-6-4 23:28
overload(重载),override(重写)
区别:重载涉及同一个类中的同名方法,要求方法名相同参数列表不同,与返回值类型无关。
          重写涉及的是子类和父类之间的同名方法,要求方法名相同参数列表相同返回值类型相同或是其子类。


作者: 郑锐    时间: 2013-6-4 23:34
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2