什么是方法重载?可以定义两个同名但参数类型不同的方法吗
1个回答
展开全部
我前几天回答过类似的问题,把答案稍微改一下给你。原帖http://zhidao.baidu.com/question/284142407.html;
所谓重载就是同一个类中存在俩或多个方法重名。可不可以重载是有限制的。
参数不同算重载,仅返回值不同不行,其实这不仅仅是语法要求,而是有现实原因的。
你可以想象,假设别人调用 add方法,调用形式是这样的:
……
add(3,0.5);
现在有两个方法:double add(int a, double b); double add(int a, int b);
假如你是编译器,你知道具体调用的是哪个方法么?显然很容易知道
而对于上述调用,假设有两个参数相同返回值不同的 add方法,即:
double add(int a, double b); int add(int a, double b);
你知道应该选哪一个么? 反正我确定不了,编译器也确定不了!确定不了就没法编译、连接!
因此,之所以返回值不同不能作为重载条件,根源在于调方法是可以不用返回值的,就像上面那样。
即:两种形式是否算重载的根本原因在于,这两种形式可不可能在某些调用场景下引起混淆!!
这就是所谓“规定”的缘由。
你要想真正的理解重载甚至精通Java,就不能仅仅记语法规则,而应该深入的想想,为什么会有这样的规则。Java是一个很优美的语言,很多规则都是有原因的。
所谓重载就是同一个类中存在俩或多个方法重名。可不可以重载是有限制的。
参数不同算重载,仅返回值不同不行,其实这不仅仅是语法要求,而是有现实原因的。
你可以想象,假设别人调用 add方法,调用形式是这样的:
……
add(3,0.5);
现在有两个方法:double add(int a, double b); double add(int a, int b);
假如你是编译器,你知道具体调用的是哪个方法么?显然很容易知道
而对于上述调用,假设有两个参数相同返回值不同的 add方法,即:
double add(int a, double b); int add(int a, double b);
你知道应该选哪一个么? 反正我确定不了,编译器也确定不了!确定不了就没法编译、连接!
因此,之所以返回值不同不能作为重载条件,根源在于调方法是可以不用返回值的,就像上面那样。
即:两种形式是否算重载的根本原因在于,这两种形式可不可能在某些调用场景下引起混淆!!
这就是所谓“规定”的缘由。
你要想真正的理解重载甚至精通Java,就不能仅仅记语法规则,而应该深入的想想,为什么会有这样的规则。Java是一个很优美的语言,很多规则都是有原因的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询