日期:2014-05-20  浏览次数:20791 次

java重载的简单问题,新手求解答。
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;}

求高手解答并告知原因,谢谢。

------解决方案--------------------
A、C、D都是吧,只要函数名相同,参数类型不一致就构成重载,与返回值和throws clause无关
但是A和C不能同时出现,因为A和C的signature一样(函数名和参数合起来叫signature)

B放进去会出错,B和类中原有方法是的signature是一样的
------解决方案--------------------
个人认为答案为ACD,因为重载是在同一个类中,方法名相同且参数列表不同的方法为重载。希望参考下
------解决方案--------------------
方法重载是指一个类中有多个方法具有相同的名字,但这些方法的参数必须不同,参数不同包括参数个数不同、参数类型不同。
由此可以判断A、C、D都属于对原方法setVar的重载,但A和C选项不能同时出现,因为他们的参数类型相同。方法的重载只与参数相关,与修饰符和返回类型没有关系。
其实写一个程序试一下就行了,相同类型和个数的参数,不同的修饰符和返回类型,程序会报错的
------解决方案--------------------
探讨
答案是C,D;
注意重载的几个点:方法的重载不关心方法返回值,只关心方法名和参数,方法名相同参数不同就是重载;
其中参数不同有几种:
1、参数个数不同;
2、参数类型不同;
3、参数顺序不同;
上提中,A的方法定义就是错的,排除,B的参数个数和类型与原方法都是一样的,排除,就只有C和D了;
自己好好看看吧