一 方法重载介绍
如果一个类中包含了两个或两个以个以上的方法名相同,但形参列表不同,则称为方法重载。
二 方法重载应用
1 代码示例
public class Overload
{
// 下面定义了两个test()方法,但方法的形参列表不同
// 系统可以区分这两个方法,这种被称为方法重载
public void test()
{
System.out.println("无参数");
}
public void test(String msg)
{
System.out.println("重载的test方法 " + msg);
}
public static void main(String[] args)
{
Overload ol = new Overload();
// 调用test()时没有传入参数,因此系统调用上面没有参数的test()方法。
ol.test();
// 调用test()时传入了一个字符串参数,
// 因此系统调用上面带一个字符串参数的test()方法。
ol.test("hello");
}
}
2 运行结果
无参数
重载的test方法 hello
3 结果分析
虽然两个test的方法名相同,但因为他们的形参列表不同,所以系统可以正常区分这两个方法。
三 重载方法里包含个数可变的形参
1代码示例
public class OverloadVarargs
{
public void test(String msg)
{
System.out.println("只有一个字符串参数的test方法 ");
}
// 因为前面已经有了一个test()方法,test()方法里有一个字符串参数。
// 此处的长度可变形参里不包含一个字符串参数的形式
public void test(String... books)
{
System.out.println("****形参长度可变的test方法****");
}
public static void main(String[] args)
{
OverloadVarargs olv = new OverloadVarargs();
// 下面两次调用将执行第二个test()方法
olv.test();
olv.test("aa" , "bb");
// 下面将执行第一个test()方法
olv.test("aa"); //a
// 下面调用将执行第二个test()方法
olv.test(new String[]{"aa"}); //b
}
}
2运行结果
****形参长度可变的test方法****
****形参长度可变的test方法****
只有一个字符串参数的test方法
****形参长度可变的test方法****
当注释掉第1个test方法,运行结果如下:
****形参长度可变的test方法****
****形参长度可变的test方法****
****形参长度可变的test方法****
****形参长度可变的test方法****
3结果分析
当调用a处代码时,系统会执行重载的test(String)方法,如果需要调用test(String... books)方法,又只想传入一个字符串参数,则可釆用b处代码重栽;而如果将第1个test方法注释掉,所有的test调用都重载第2个test方法。基于以上分析,大部分时候并不推荐重载个数可变的方法,它容易降低程序的可读性。