什么是方法的重载:
方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。
重载Overloading是一个类中多态性的一种表现。
简单来说方法的重载就是类的同一种功能的多种实现方式。到底应该采用哪种方式,取决于调用时传递的参数
假设我们有一个需求是 写一个方法接收两个参数,返回较大的那个数。我们就会这样写
// 如果参数是 int 类型的
public int getMaxInt(int a, int b){
if (a > b){
return a;
}else {
return b;
}
}
// 如果参数是 float 类型的
public float getMaxFloat(float a, float b){
if (a > b){
return a;
}else{
return b;
}
}
当我们要比较获得比较大的int数据时就调用getMaxInt。要获得较大的float就调用getMaxFloat。
能不能把两个方法名称都定义一样呢,比如统一定义成getMax 方法名称。因为两个方法虽然使用了
相同的方法名,但是因为他们的返回数据类型,和参数的类型都是不一样的,因此java的编译器能够识别出来你到底是调用哪一个,这也是多态的一种体现
public int getMax(int a, int b){
if (a > b){
return a;
}else {
return b;
}
}
// 如果参数是 float 类型的
public float getMax(float a, float b){
if (a > b){
return a;
}else{
return b;
}
}
方法重载的注意事项:
1. 方法的参数类型,参数个数(参数名称不算),顺序至少有一项不同
2. 返回的数据类型可以不同
3. 方法的修饰符可以不同
如果只是返回数据类型不一样能否构成重载?
例如:
public float getMax(float a, double){
if (a > b){}
return (float) a;
}else {
return (float) b;
}
public double getMax(float a, float b){
if (a > b){}
return a;
}else {
return b;
}
答案是:如果只是返回数据类型不一样并不能构成重载
如果只是访问修饰符不一样,能否构成重载?
答案是:不能