概念:一个类中的一组方法 这些方法有相同的方法名 不同的参数列表 这样的一组方法构成了方法重载
方法重载可以有不同的修饰符、返回值类型 但同名的方法必须有不同的参数列表
仅有不同的修饰符、返回值类型不足以区分方法是否重载
不同的参数列表体现为:
1.参数的个数
2.参数的类型
3.参数的顺序
作用:为了让使用者便于记忆与调用 只需要记录名字 执行不同的操作
我们可以自己设计方法重载
调用时 先通过方法名来定位
如果方法名字都一样 通过方法的参数列表来定位方法
若没有与传递参数类型一致的方法 可以找到一个可以相互转换参数类型的方法来执行
如没有char类型参数的方法 但是int类型参数的方法存在 可以通过来类型转换来找到方法去执行
================================================================================
JDK1.5版本之后 有一个新的写法
int…x 叫动态参数列表 类型固定 个数可以动态 0-n之间都可以
public class TestOverload {
public void test(int...x){
//其本质就是一个数组 但是它与数组方法不同的地方在于 它可以不传参 数组的方法必须传参数
//动态参数列表在方法的参数中只能存一份 且必须放置在方法参数的末尾
//如int...x,int...x不行 int...x,int a不行 但是int a,int...x可以
//不可以与相同维度数组类型的方法构成方法重载
//如int[] x与int...x不行 int[][] x与int[]...x不行
//但是int[][] x与int...x可以 int[] x与int[]...x可以
System.out.println("执行了test方法带动态参数列表");
for(int i = 0;i<x.length;i++){
System.out.println(x[i]);
}
}
public void test(){
//这可以与动态参数列表的方法构成了方法重载
//但是如果不输入参数 系统认为是没有参数 所以执行的是没有参数的方法
System.out.println("执行了test方法没有参数");
}
//如果给定了参数类型 那么不传参数不行 传的参数类型不匹配也不行
//如果方法名字都一样 通过方法的参数列表来定位方法
//若没有与传递参数类型一致的方法 可以找到一个可以相互转换参数类型的方法来执行
//如int和char
// char可以通过Unicode的码与int类型相对应
//int想要转换成char类型 需强制类型转换
public void test(int i){
//若没有int类型 但是有char类型的方法 可以通过强制类型转换类执行方法
//如t.test((char)97);
System.out.println("执行了test方法带int参数"+i);
}
public void test(char c){
//如果没有char类型 但是有int类型的方法 输入char类型的参数 程序可以执行
//这涉及到了类型之间的转换问题 char可以与int类型相互转换
System.out.println("执行了test方法带char参数"+c);
}
public void test(String s){
System.out.println("执行了test方法带int参数"+s);
}
public void test(boolean b){
System.out.println("执行了test方法带boolean参数"+b);
}
public static void main(String[] args){
TestOverload t = new TestOverload();
t.test();
}
}