黑马程序员技术交流社区

标题: 有关于重载的问题 [打印本页]

作者: .Mr    时间: 2013-12-2 13:14
标题: 有关于重载的问题
本帖最后由 .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;)
复制代码

作者: 25343215    时间: 2013-12-2 13:28
本帖最后由 25343215 于 2013-12-2 16:58 编辑

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

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

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

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

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

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

作者: 绕世界流浪丶    时间: 2013-12-2 15:16
本帖最后由 绕世界流浪丶 于 2013-12-2 15:19 编辑


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不是方法的重载

作者: 关静刚    时间: 2013-12-2 16:26
当一个重载方法被调用时,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
作者: 关静刚    时间: 2013-12-2 16:26
本帖最后由 关静刚 于 2013-12-2 16:28 编辑

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

那个小括号是他打错了的吧,他问的是判断是不是重载,跟函数体没多大关系吧
作者: 关静刚    时间: 2013-12-2 16:41
ily521125 发表于 2013-12-2 16:36
那个小括号是他打错了的吧,他问的是判断是不是重载,跟函数体没多大关系吧 ...

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

谢谢 解决的很到位 不会错了。
作者: .Mr    时间: 2013-12-3 22:28
关静刚 发表于 2013-12-2 16:26
当一个重载方法被调用时,Java 用参数的类型和(或)数量来表明实际调用的重载方法的版本。因此,每个重载 ...

谢谢 GOT IT




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