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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© .Mr 中级黑马   /  2013-12-2 13:14  /  1615 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 .Mr 于 2013-12-3 22:09 编辑
  1. public class Test(){
  2.     public void setVar(int a,int b,float c){
  3.   }
  4. }
  5. 求高手解答一下下面每一个是与不是重载的原因。我的感觉答案是A和E,但不是非常的确定。请帮忙写个原因。
  6. A.private void setVar (int a, float c, int b) { }  
  7. B.protected void setVar (int a, int b, float c) { }  
  8. C.public int setVar (int a, float c, int b) (return a;)  
  9. D.public int setVar (int a, int b, float c) (return a;)  
  10. E.protected float setVar (int a, int b, float c) (return c;)
复制代码

评分

参与人数 1技术分 +1 黑马币 +6 收起 理由
枫儿 + 1 + 6 神马都是浮云

查看全部评分

13 个回复

倒序浏览
本帖最后由 25343215 于 2013-12-2 16:58 编辑

而重载的规则:Overwrite
  1、必须具有不同的参数列表;
                如果参数个数不同,就不管它的参数类型了!
                如果参数个数相同,那么参数的类型或者参数的顺序必须不同。
  2、可以有不同的返回类型,只要参数列表不同就可以了;
  3、可以有不同的访问修饰符;
  4、可以抛出不同的异常;

总上述原因,答案我认为是A、C

注:楼主C选项函数体是用()表示的,如果是手误,那选择A、C,如果不是只能选A了。。。

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
重载(overLoad)的要点:
a.在使用重载时,必须是不同的参数样式。例如不同的参数类型,不同的参数个数,不同的参数顺序(注意:同一方法内的几个参数类型必须不一样,可以是fun(int,float),但不能是fun(int,int),即重参)
b.不能通过访问权限,返回类型,抛出的异常的不同进行重载;
c.方法的异常类型和数目不会对重载造成影响;
d.对于子类继承父类时,如果父类中定义的一个方法是private的,即使子类使用同名的方法,也不是重载,只是重新定义了一个新的方法。
根据以上几条来判定,我认为上述选项中b,d,e都不是重载。即参数列表相同,返回类型不同或访问权限不同不算重载。

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 ily521125 于 2013-12-2 15:29 编辑

构成重载的条件有以下六条:


  • 方法名相同
  • 方法参数类型,个数,顺序至少有一项不同
  • 方法的返回类型可以不同
  • 方法的修饰符可以不同
  • 只是返回类型不一样,不能构成重载
  • 只是控制访问修饰符不一样,不能构成重载

根据以上的条件判断能构成重载的只有A和C

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 绕世界流浪丶 于 2013-12-2 15:19 编辑

  • public class Test(){
  •     public void setVar(int a,int b,float c){
  •   }
  • }

A.private void setVar (int a, float c, int b) { }  
B.protected void setVar (int a, int b, float c) { }  
C.public int setVar (int a, float c, int b) (return a;)  
D.public int setVar (int a, int b, float c) (return a;)  
E.protected float setVar (int a, int b, float c) (return c;)
方法重载与访问类型无关,与返回值类型也无关,只看函数名和参数列表就可以。。。函数名想相同,参数列表不同,就是方法的重载。。。所以B不是方法的重载

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
当一个重载方法被调用时,Java 用参数的类型和(或)数量来表明实际调用的重载方法的版本。因此,每个重载方法的参数的类型和(或)数量必须是不同的。虽然每个重载方法可以有不同的返回类型,但返回类型并不足以区分所使用的是哪个方法。简单说就是:函数名相同, 参数列表不同, 就是重载。
public class Test(){
    public void setVar(int a,int b,float c){
  }
}
A.private void setVar (int a, float c, int b) { }  
正确

B.protected void setVar (int a, int b, float c) { }   
//参数列表相同,错

C.public int setVar (int a, float c, int b) (return a;)  
//函数写法错误,改正:public int setVar (int a, float c, int b) {return a;}

D.public int setVar (int a, int b, float c) (return a;)  //参数列表相同,错

E.protected float setVar (int a, int b, float c) (return c;)  //参数列表相同,错

所以选A

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 关静刚 于 2013-12-2 16:28 编辑

希望能帮到楼主!
回复 使用道具 举报
关静刚 发表于 2013-12-2 16:26
当一个重载方法被调用时,Java 用参数的类型和(或)数量来表明实际调用的重载方法的版本。因此,每个重载 ...

那个小括号是他打错了的吧,他问的是判断是不是重载,跟函数体没多大关系吧
回复 使用道具 举报
ily521125 发表于 2013-12-2 16:36
那个小括号是他打错了的吧,他问的是判断是不是重载,跟函数体没多大关系吧 ...

恩哈,但是最后还得选正确答案
回复 使用道具 举报
问题解决后,LZ自行将标题改为提问结束
回复 使用道具 举报
Cola 中级黑马 2013-12-3 07:42:02
11#
重载只要函数名相同,参数列表不同就可以了,其他的不用管。答案是AC。B的参数列表与Test类中的相同,不是重载
回复 使用道具 举报
Cola 中级黑马 2013-12-3 07:43:00
12#
重载只要函数名相同,参数列表不同就可以了,其他的不用管。答案是AC。BDE的参数列表与Test类中的相同,不是重载
回复 使用道具 举报
.Mr 中级黑马 2013-12-3 22:26:58
13#
25343215 发表于 2013-12-2 13:28
而重载的规则:Overwrite
  1、必须具有不同的参数列表;
                如果参数个数不同,就不管它的 ...

谢谢 解决的很到位 不会错了。
回复 使用道具 举报
.Mr 中级黑马 2013-12-3 22:28:19
14#
关静刚 发表于 2013-12-2 16:26
当一个重载方法被调用时,Java 用参数的类型和(或)数量来表明实际调用的重载方法的版本。因此,每个重载 ...

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