public class MyClass{
public void setVar(int a,int b,float c){}
}
下面哪些是对setVar()的重载?()
A.private void setVar(int a,float b,int b){}B.protected void setVar(int x,int y,float z){}C.public int setVar(int a,float c,int b){return a;}D.public int setVar(int a,float c){return a;}求高手解答并告知原因,谢谢。

解决方案 »

  1.   

    答案是C,D;
    注意重载的几个点:方法的重载不关心方法返回值,只关心方法名和参数,方法名相同参数不同就是重载;
    其中参数不同有几种:
    1、参数个数不同;
    2、参数类型不同;
    3、参数顺序不同;
    上提中,A的方法定义就是错的,排除,B的参数个数和类型与原方法都是一样的,排除,就只有C和D了;
    自己好好看看吧
      

  2.   

    A、C、D都是吧,只要函数名相同,参数类型不一致就构成重载,与返回值和throws clause无关
    但是A和C不能同时出现,因为A和C的signature一样(函数名和参数合起来叫signature)B放进去会出错,B和类中原有方法是的signature是一样的
      

  3.   

    个人认为答案为ACD,因为重载是在同一个类中,方法名相同且参数列表不同的方法为重载。希望参考下
      

  4.   

    方法重载是指一个类中有多个方法具有相同的名字,但这些方法的参数必须不同,参数不同包括参数个数不同、参数类型不同。
    由此可以判断A、C、D都属于对原方法setVar的重载,但A和C选项不能同时出现,因为他们的参数类型相同。方法的重载只与参数相关,与修饰符和返回类型没有关系。
    其实写一个程序试一下就行了,相同类型和个数的参数,不同的修饰符和返回类型,程序会报错的
      

  5.   

    解释的很好,我不明白A错在哪里?
    选ACD
      

  6.   

    我说了,A的方法定义有错
    A答案中
    A.private void setVar(int a,float b,int b){}
    float b,int b;这样写是错的,不能有两个或多个相同的参数名,你让编译器做,他知道你这什么意思?
      

  7.   

    A答案中
    A.private void setVar(int a,float b,int b){}恩,还真是没有注意看!不会是楼主的笔误吧