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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 潘廖明 于 2013-3-11 15:10 编辑

为什么方法的返回值类型不能够区分重载的方法?

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

5 个回复

正序浏览
方法的返回值是通过Method类反射机制来反射回方法的返回类型,也就是那个方法调用了数据,返回的就是那个方法类型的数据。
但是当调用方法的时候不保持它的返回值,没有重载时程序还可以通过方法名知道是调用了哪个方法,但是当重载后,再通过方法名去找的话,程序不能区分到底是什么类型的方法。
就像要找某本书一样,就说要找那本书,但是书有三种色的,到底是要红的,白的,还是蓝的?
回复 使用道具 举报
HM张勇 发表于 2013-3-11 15:12
重载的定义是:

方法名称相同,参数个数、次序、类型不同。重载对返回值没有要求,可同可不同。

这个我晓得  他问的只是为什么不可以  我只是给他粗略的解释下
回复 使用道具 举报
HM李帅 发表于 2013-3-11 15:02
打个浅显的比方 比如有个 public int a()和public String a()
我程序里面调用  String t = a();
这 ...

重载的定义是:

方法名称相同,参数个数、次序、类型不同。重载对返回值没有要求,可同可不同。

当参数个数、类型、次序都相同,方法名也相同,仅返回值不同,则无法构成重载

比如:

public int A(int x);

public double A(int x);

这2个方法不能构成重载,会有编译错误。

然而:

public int A(int x):

public double A(double x);

上述可以重载。
回复 使用道具 举报
      方法的重载是为了解决不同功能相同方法名重复的问题的。
      例如,对于int func(){}和void func(){}这两个方法来说,我们在调用方法时,如果这样调用int result=func();虚拟机系统可以识别是想调用返回值为int类型的func方法;但是java调用方法时很多时候可以忽略方法的返回值,如果采用func();这样的方式来调用func方法,你可以判断调用的是哪个方法吗?同样java也不能判断调用的是哪一个方法,这样程序就挂了。
回复 使用道具 举报
打个浅显的比方 比如有个 public int a()和public String a()
我程序里面调用  String t = a();
这时候程序根本不晓得你调用的是int那个a()还是String的那个a()
所以返回类型在调用的时候是区别不出的 但是参数的类型和个数可以

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

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