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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周怡 中级黑马   /  2013-2-4 20:45  /  1877 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型

6 个回复

倒序浏览
override(重写)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载)
1、参数类型、个数、顺序至少有一个不相同。  
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。


综上,overload(重载)不能改变返回值类型
回复 使用道具 举报
补充:overload:
    如果是两个方法的方法名相同,参数列表也都相同,这时是不能改变返回值类型的,因为jvm会糊涂,到底该调用那个方法;
回复 使用道具 举报
Overload是重载,Override是覆盖,也就是重写。

重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。

重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中定义的方法,这相当于把父类中的那个完全相同的方法给替换掉了,这是面向对象编程的多态的一种表现。
注意:
1、子类覆盖父类的方法,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。
2、子类方法的访问权限只能比父类更大,不能更小,如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。

关于Overload中,如果两个方法的参数列表完全相同,返回值不同是否是重载?
这是不行的,重载跟返回值无关。
假如我们在同一个类中,写了两个方法名相同并且参数列表也相同,只是返回值不同,
public Stringshow(int number)
public int Stringshow (int number)  
而我们调用这个方法给它赋值的时候java虚拟机并不知道你要赋给的是String型的方法还是int型的方法,所以重载跟返回值无关。

关于Override覆盖,最熟悉的就是对接口方法的实现。
接口只是对方法进行声明,而我们在实现时,需要实现接口声明的所有方法。
此外,我们在继承中也可能会在子类中覆盖父类的方法。
比如覆盖Object类的equals()方法。
回复 使用道具 举报

Overload为重载,表示同一个类中可以有多个相同名称的方法,但这些方法中的参数的个数或者参数的类型不相同。
Override 为覆盖(重写)就是继承父类中的方法某一个方法,及方法名参数列表完全相同,通过子类创建对象时,将调用子类的方法,这相当于父类中的方法被子类覆盖了,这就是java特性中的多态的表现。
注意:
子类覆盖父类方法时,只能抛出比父类更少的异常,或抛出异常为父类的子异常。
子类的访问权限只能比父类的更大,不能更小。
如果父类方法的修饰符为private时,对这种方法不存在覆盖,则子类写的     
   方法和父类的相同也不是覆盖。
4. 覆盖方法的返回值必须和被覆盖的方法的返回值类型保持一致

至于Overload 是否可以改变返回值的类型这个问题,要看你到底想问什么了,
这个问题问的有点含糊,如果方法的参数列表不同,那么返回值可以不同;但我感觉你是想问如果方法名和参数列表相同,只有返回值的类型不同能否实现Overload,我们可以使用反正法来说明这个问题,应为我们调用一个方法是可以不定义方法的返回类型的变量的,及不关心返回的结果;
例如:map.remove(key); 我们调用map的remove方法时,虽然remove方法有返回值,但我们通常情况下是不定义返回类型的变量的,此时如果类中有两个方法,方法名和方法类别完全相同只有返回类型不同,java就无法确定编程者到底想要调用哪个方法,因为java是无法通过返回结果类型来判断的。
回复 使用道具 举报
override(重写)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载)
1、参数类型、个数、顺序至少有一个不相同。  
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。
回复 使用道具 举报
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
     1. 重写Overriding是父类与子类之间多态性的一种表现
     2. 重载Overloading是一个类中多态性的一种表现。
     3. 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。
     4. 如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
     5. Overloaded的方法是可以改变返回值的类型

重载有三个特性:
   1. 方法名相同
   2. 参数列表不同
   3. 在一个类中构造函数就是重载的一种表现.
方法重写的一些特性:
  1.发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)
  2.子类抛出的异常不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)
  3.子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马