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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘一锋 黑马帝   /  2011-10-14 11:22  /  2495 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

重载,两个参数的参数列表类型个数都一样,但是返回值不一样就不是重载,为什么?
重载:父类的权限是私有的,子类其他地方跟父类一样,这不是重载,为什么?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 伍碧林 于 2011-10-14 11:43 编辑

一个类中的重载就是在类中有很多同名的函数,我们调用一个方法的时候给编译器的只有函数名+函数参数。所以重载只看参数列表的(参数类型,参数个数),假如有两个只是返回类型不同,函数名和参数类型完全相同的方法,编译器怎么绑定到唯一的方法呢?
重载不是在一个类中么,什么父类子类

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
敖东 黑马帝 2011-10-14 12:19:31
藤椅
对于第一个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map.remove(key)方法时,虽然remove方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
问题一:你调用一个方法,如果有多个方法同名,系统必须要知道到底你要调用哪一个,参数可以帮助系统在方法入口处得到答案,他根据你给的参数就知道该将哪个方法的入口调入栈中。如果只有返回值的不同,很多情况系统是不可能得到有效的判断条件的,比如:String method();int method();如果你这样调用:method();系统当然不知道该调用哪个。所以就不算重载。
问题二:只是一个简单的继承关系,不构成重载的条件。重载得是一个类里面,发放发明相同,参数类型或者参数个数等等有变化等。如果说子类与父类重载,那就是子类继承父类的某个方法,然后跟这个方法构成重载。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
OK,谢谢,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马