方法重载是允许在一个类的定义中,多个方法使用相同的方法名。
1、成员方法重载
Eg:方法名为println,要重载方法名,可以如下声明:
public void println (int i)
public void println (float f)
public void println (String s)
重载方法有两条规则:
(1)调用语句的自变量列表必须足够判明要调用的是哪个方法。自变量的类型可能要进行正常的扩展提升(如浮点变为双精度),但在有些情况下会引起混淆。
(2)方法的返回类型可能不同。如果两个同名方法只有返回类型不同,而自变量列表完全相同,则是不够的。因为在方法执行前不知道能得到什么类型的返回值,所以也就不能确定要调用的是哪个方法。重载方法的参数表必须不同,即参数个数或参数类型不同。
下面的例题对寻求几个不同类型数据最大者的成员方法max()进行了重载。
import java.util.Random;
public class OverLoadingTest{
public float max(float f1,float f2){
if(f1>f2) return f1;
else return f2;
}
public int max(int m,int n){
if(m>n) return m;
else return n;
}
public int max(int l,int m,int n){
return max(max(l,m),n);
}
public static void main(String[] args){
OverLoadingTest o1=new OverLoadingTest();
Random random=new Random();
float f1=random.nextFloat();
float f2=random.nextFloat();
float f3=random.nextFloat();
int a=Math.round(100*f1);
int b=Math.round(100*f2);
int c=Math.round(100*f3);
//将自动调用max(int,int)
System.out.println("max("+a+","+b+")="+o1.max(a,b));
//将自动调用max(float,float)
System.out.println("max("+f1+","+f2+")="+o1.max(f1,f2));
//将自动调用max(int,int,int)
System.out.println("max("+a+","+b+","+c+")="+o1.max(a,b,c));
}
}
在其运行结果中用println()方法输出float、int等不同类型的数据。我们不需要对方法println()进行重载,因为java.lang.System类的out变量是java.io.PrintStream类型的。而在PrintStream类中对println()方法进行了重载,定义了多个println()方法。所以我们能够方便的对各种数据类型进行输出显示。
2、构造方法重载
Eg:
public class Xyz{
int x; // 成员变量
public Xyz(){//无参的构造方法
x=0;
}
public Xyz(int i){//带参的构造方法
x=i;
}
}
在创建Xyz的实例时,可以使用两种形式:
Xyz xyz1=new Xyz();//使用无参的构造方法
Xyz xyz2=new Xyz(6);//使用有一个int参数的构造方法
因为构造方法的特殊性,它不允许程序员按通常调用方法的方法来调用。构造方法中参数列表的说明方式决定了该类实例的创建方式。
资料来源:Java程序设计教程(第二版) 清华大学出版社