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;}求高手解答并告知原因,谢谢。
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、参数个数不同;
2、参数类型不同;
3、参数顺序不同;
上提中,A的方法定义就是错的,排除,B的参数个数和类型与原方法都是一样的,排除,就只有C和D了;
自己好好看看吧
但是A和C不能同时出现,因为A和C的signature一样(函数名和参数合起来叫signature)B放进去会出错,B和类中原有方法是的signature是一样的
由此可以判断A、C、D都属于对原方法setVar的重载,但A和C选项不能同时出现,因为他们的参数类型相同。方法的重载只与参数相关,与修饰符和返回类型没有关系。
其实写一个程序试一下就行了,相同类型和个数的参数,不同的修饰符和返回类型,程序会报错的
选ACD
A答案中
A.private void setVar(int a,float b,int b){}
float b,int b;这样写是错的,不能有两个或多个相同的参数名,你让编译器做,他知道你这什么意思?
A.private void setVar(int a,float b,int b){}恩,还真是没有注意看!不会是楼主的笔误吧