黑马程序员技术交流社区

标题: 问个关于重载和覆盖的问题! [打印本页]

作者: 刘一锋    时间: 2011-10-14 11:22
标题: 问个关于重载和覆盖的问题!
重载,两个参数的参数列表类型个数都一样,但是返回值不一样就不是重载,为什么?
重载:父类的权限是私有的,子类其他地方跟父类一样,这不是重载,为什么?

作者: 伍碧林    时间: 2011-10-14 11:38
本帖最后由 伍碧林 于 2011-10-14 11:43 编辑

一个类中的重载就是在类中有很多同名的函数,我们调用一个方法的时候给编译器的只有函数名+函数参数。所以重载只看参数列表的(参数类型,参数个数),假如有两个只是返回类型不同,函数名和参数类型完全相同的方法,编译器怎么绑定到唯一的方法呢?
重载不是在一个类中么,什么父类子类
作者: 敖东    时间: 2011-10-14 12:19
对于第一个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map.remove(key)方法时,虽然remove方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。
作者: 颜庭飞    时间: 2011-10-14 12:57
问题一:你调用一个方法,如果有多个方法同名,系统必须要知道到底你要调用哪一个,参数可以帮助系统在方法入口处得到答案,他根据你给的参数就知道该将哪个方法的入口调入栈中。如果只有返回值的不同,很多情况系统是不可能得到有效的判断条件的,比如:String method();int method();如果你这样调用:method();系统当然不知道该调用哪个。所以就不算重载。
问题二:只是一个简单的继承关系,不构成重载的条件。重载得是一个类里面,发放发明相同,参数类型或者参数个数等等有变化等。如果说子类与父类重载,那就是子类继承父类的某个方法,然后跟这个方法构成重载。

作者: 刘一锋    时间: 2011-10-15 00:11
OK,谢谢,




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