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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵磊 黑马帝   /  2011-7-27 21:16  /  2070 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

overload与override的区别?overload的方法是否可以改变返回值的类型呢?

4 个回复

倒序浏览
黑马网友  发表于 2011-7-27 21:34:19
沙发
overload是重载,指的是几个方法有相同的方法名(通过参数个数和类型来区分),对返回值不做要求。
override就是重写或是覆盖了,指的是方法签名(方法名,参数个数和类型)完全相同,或是变量名完全相同,而覆盖了。就像济南的“局部有雨”和山东的“局部有雨”。小范围的优先级更高
回复 使用道具 举报
黑马网友  发表于 2011-7-27 23:24:38
藤椅
overload是重载的意思,override是覆盖的意思,也就是重写。
重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload,是不行的;反之两个方法的参数列表不一样,则可以。
override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。(具体请见张孝祥面试题大全。)
回复 使用道具 举报
黑马网友  发表于 2011-7-27 23:38:59
板凳
一句话概括:
重载(Overload):只看同名函数的参数列表(参数列表不同,返回值、修饰符、抛出的异常可以不同)
重写(override):子父类包括参数列表、返回值类型要一样,访问修饰符的权限大于被重写方法的访问修饰符。

第二个问题:如果两个方法的参数列表完全一样,不可以让他们的返回值不同来实现重载(Overload).
回复 使用道具 举报
黑马网友  发表于 2011-7-27 23:59:22
报纸
一、重载主要发生在同一个类中的多个同名的方法之间,重写发生在子类和父类的同名方法之间,
二、方法的返回值不能作为重载的依据,
对于这么两个方法[code=java]int f(){};
void f(){};[/code]如果我们这样调用[code=java]int result = f();[/code]系统可以知道是想调用返回值类型为int的方法,但Java调用方法可以忽略返回值的,所以如果这样调用一个方法
f();
那么这样你就不能判断到底是调用那个方法了,既然你都不知道调用哪个,那么虚拟机就更不知道,所以在编程的时候不能让虚拟机糊涂,系统以糊涂那么肯定是自己错了,
三、overload和override的区别
override(重写)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载)
1、参数类型、个数、顺序至少有一个不相同。  
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马