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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 刘学明    于 2013-4-23 18:46 编辑

毕老师说 方法的重载和方法的返回值没有关系  只和参数有关系。

void show(int a,char b,double c){}

a.
void show(int x,char y,double z){}//没有,因为和原函数一样。

b.
int show(int a,double c,char b){}//重载,因为参数类型不同。注意:重载和返回值类型没关系。
c.

void show(int a,double c,char b){}//重载,因为参数类型不同。注意:重载和返回值类型没关系。

d.
boolean show(int c,char b){}//重载了,因为参数个数不同。

e.
void show(double c){}//重载了,因为参数个数不同。

f.
double show(int x,char y,double z){} 和   void show(int a,char b,double c){}
这两个函数参数是一样的 只是返回值不同  这两个函数为什么不能同时在一个类中。






评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2

查看全部评分

8 个回复

倒序浏览
  1. public class Test2
  2. {
  3.         double show(int x,char y,double z){}

  4.         void show(int a,char b,double c){}
  5. }
复制代码
这样的话编译就不能通过,方法名相同、参数列表相同而返回类型不同,编译器会认为是同一个方法而报错:
Test2.java:5: error: method show(int,char,double) is already defined in class Test2
  1. ---------- javac ----------
  2. Test2.java:5: error: method show(int,char,double) is already defined in class Test2
  3.         void show(int a,char b,double c){}
  4.              ^
  5. 1 error

  6. 输出完成 (耗时 0 秒) - 正常终止
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
方法的重载是指方法名相同,而参数不同(包括参数顺序,类型的不同),和返回值无关。所以这两个方法会被认为是同一个方法,而不是重载。
回复 使用道具 举报
如果参数的个数、类型、次序都相同,方法名也相同,仅返回值不同,则无法构成重载
回复 使用道具 举报
方法重载是指参数不同(参数列表(参数个数),参数类型),和返回值没关系
回复 使用道具 举报
你觉得两个在一个类中可以定义
void ff(){}

void ff(){}
吗?它会说你重复定义了一个

而你说的这个,
double show(int x,char y,double z){}

void show(int a,char b,double c){}
正是因为它不满足重载的定义,也就是参数的个数或者类型不同,与返回值无关。
所以编译器认为它是一个函数,当然就报错了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
方法的重载要满足参数不同,参数不同可以是参数的类型不同,或者参数的个数不同,但是与方法的返回值类型是没有关系的。
  1.         public static void main(String[] args) {
  2.                 method(1, "asd", true);
  3.         }

  4.         public static int method(int i, String s, boolean b) {
  5.                 return 0;
  6.         }
  7.        
  8.         public static String method(int i, String s, boolean b) {
  9.                 return 0;
  10.         }
复制代码
可见,当在main中调用method方法的时候,你自己也不知道调用的是哪个方法,而编译器在编译的时候,会认为第二个方法是重复的方法,编译不通过。

评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2

查看全部评分

回复 使用道具 举报
就是因为这两个函数的参数类型都一样,而且函数名一样,都是show,那你调用是写show(),虚拟机不知道是该执行哪一个,不晓得是执行要返回的show()还是没有返回值的show(),用毕老师的话就说虚拟机会疯掉的:loveliness:,所以这两个函数不同时存在的。明白了没

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
黄玉昆 黑马帝 2013-4-22 21:40:20
9#
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马