在学习方法重载时,我发现方法重载是一个描述起来简单,但是理解起来较为复杂的java语法,但是幸好,作为一个新手,我在一些实际操作之后,对方法重载有了一些更深入的了解。
如果让我简述java方法重载是什么,现在的程度我可以这么说:
java方法重载就是,在同一个类中,定义两个以上返回值类型相同、方法名相同、参数的个数或者类型不同的代码书写方式
它的作用在于对不同数据类型的的数据实现相似的操作。
拿C语言的函数和java的方法来做对比理解:
//C语言定义一个函数:
int function(int a, int b)
{
return a + b;
}
…
//调用函数:
int sum;
sum = function(2,2);
可以看到,在定义时规定了(int a, int b)
,所以调用时传递了两个参数(2,2)
。
所以有人提出,如果面对现实苛刻的需求,想用这个函数计算两个以上的参数该怎么办?
//难道是这样做吗?
int function(int a, int b)
{
return a + b;
}
int function(int a, int b,int c)
{
return a + b;
}
int function(int a, int b,int c,int d)
{
return a + b;
}
C语言不允许代码块中出现同名的函数,所以这样做是不对的,C语言并不能解决这个需求。
而java中的方法重载就能做到。
//java中允许这样书写
public int add(int a,int b){
return = a + b;
}
public int add(int a,int b,int c){
return = a + b + c;
}
public int add(int a,int b,double c){
return = a + b + c;
}
…
//调用方法:
int sum = echo.add(1,1);
int sum = echo.add(1,1,1);
int sum = echo.add(1,1,2.5);
这样一来,需求就满足了。
这就是java方法重载,通过实际需求孕育而生,节约了代码的篇幅,理解和运行起来更加高效。
有几点需要注意:
//比如:
public int add(int a,int b){
return = a + b;
}
public double add(int a,int b,int c){
return = a + b + c;
}
这样书写虽然不会出错,也能得出正确的结果,但是这并不是方法重载。
因为返回值的数据类型不同了。
除此之外,
public int add(int a,int b){
return = a + b;
}
public int add(int a,int b){
return = a + b ;
}
或者,
public int add(int a,int b){
return = a + b;
}
public double add(int a,int b){
return = a + b ;
}
或者,
public int add(int a,int b){
return = a + b;
}
public float add(int a,int b,double c){
return = a + b ;
}
public int add(int a,int b,long c){
return = a + b ;
}
都是错误的写法。
语法会通过方法名后括号中的参数类型和个数来判断是不是方法重载,如果在实现方法重载时参数类型和个数相同,就会出错。
计算参数中有较大字节的数据(double
、long
)参与运算时,输出却是较小字节的数据(float
、int
),这违反了数据的自然转换,所以会出错。
差不多就是这些了,关于java方法重载的理解。