黑马程序员技术交流社区

标题: 为什么方法的返回值类型不能够区分重载的方法? [打印本页]

作者: 潘廖明    时间: 2013-3-11 14:50
标题: 为什么方法的返回值类型不能够区分重载的方法?
本帖最后由 潘廖明 于 2013-3-11 15:10 编辑

为什么方法的返回值类型不能够区分重载的方法?
作者: HM李帅    时间: 2013-3-11 15:02
打个浅显的比方 比如有个 public int a()和public String a()
我程序里面调用  String t = a();
这时候程序根本不晓得你调用的是int那个a()还是String的那个a()
所以返回类型在调用的时候是区别不出的 但是参数的类型和个数可以
作者: HM李超    时间: 2013-3-11 15:05
      方法的重载是为了解决不同功能相同方法名重复的问题的。
      例如,对于int func(){}和void func(){}这两个方法来说,我们在调用方法时,如果这样调用int result=func();虚拟机系统可以识别是想调用返回值为int类型的func方法;但是java调用方法时很多时候可以忽略方法的返回值,如果采用func();这样的方式来调用func方法,你可以判断调用的是哪个方法吗?同样java也不能判断调用的是哪一个方法,这样程序就挂了。
作者: 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);

上述可以重载。

作者: HM李帅    时间: 2013-3-11 15:14
HM张勇 发表于 2013-3-11 15:12
重载的定义是:

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

这个我晓得  他问的只是为什么不可以  我只是给他粗略的解释下
作者: 邹学良    时间: 2013-3-11 15:23
方法的返回值是通过Method类反射机制来反射回方法的返回类型,也就是那个方法调用了数据,返回的就是那个方法类型的数据。
但是当调用方法的时候不保持它的返回值,没有重载时程序还可以通过方法名知道是调用了哪个方法,但是当重载后,再通过方法名去找的话,程序不能区分到底是什么类型的方法。
就像要找某本书一样,就说要找那本书,但是书有三种色的,到底是要红的,白的,还是蓝的?




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