方法重载
英文 overload
在 同一个类中,多个同名方法,但 参数列表不同 。
参数列表不同(符合下面一个即可):
个数不同
类型不同
与 修饰符 和 返回值类型 无关。
例子:
public static int sum(int a,int b){
return a+b
}
public static double sum(double a,double b){
return a+b
}
重载方法调用
JVM通过方法的参数列表,调用不同的方法。
好处
假设要实现一个方法,实现求和运算,代码如下:
public static int sum(int a,int b){
return a+b
}
但在真实情况中,可能会传入long型、float型、double型,有了方法重载,方法名不变,只需改变参数列表即可
public static long sum(long a,long b){
return a+b
}
public static double sum(double a,double b){
return a+b
}
在调用时,如果是sum(1.5,3.14),jvm会根据传入的 1 和 2,找到匹配参数列表的方法,执行sum(double a,double b)方法
与C语言相比
C语言没有重载,所以在实现上面功能时,就需要起n个函数名,程序员需要记忆更多的函数
练习
练习一
比较两个数据是否相等。参数类型分别为两个 byte 类型,两个 short 类型,两个 int 类型,两个 long 类型,并 在 main 方法中进行测试。
public static void main(String[] args) {
//定义不同数据类型的变量 byte a = 10;
byte b = 20;
short c = 10;
short d = 20;
int e = 10;
int f = 10;
long g = 10;
long h = 20;
// 调用 System.out.println(compare(a, b));
System.out.println(compare(c, d));
System.out.println(compare(e, f));
System.out.println(compare(g, h));
}
// 两个byte类型的
public static boolean compare(byte a, byte b) {
System.out.println("byte");
return a == b;
}
// 两个short类型的
public static boolean compare(short a, short b) {
System.out.println("short");
return a == b;
}
// 两个int类型的
public static boolean compare(int a, int b) {
System.out.println("int");
return a == b;
}
// 两个long类型的
public static boolean compare(long a, long b) {
System.out.println("long");
return a == b;
}
练习二
判断哪些方法是重载关系。
public static void open(){}
public static void open(int a){}
static void open(int a,int b){}
public static void open(double a,int b){}
public static void open(int a,double b){}
public void open(int i,double d){}
public static void OPEN(){}
public static void open(int i,int j){}
练习三
模拟输出语句中的 println 方法效果,传递什么类型的数据就输出什么类型的数据,只允许定义一个方法名 println 。
public static void println(byte a) {
System.out.println(a); }
public static void println(short a) {
System.out.println(a);
}
public static void println(int a) {
System.out.println(a);
}
public static void println(long a) {
System.out.println(a);
}
public static void println(float a) {
System.out.println(a);
}
public static void println(double a) {
System.out.println(a);
}
public static void println(char a) {
System.out.println(a);
}
public static void println(boolean a) {
System.out.println(a);
}
public static void println(String a) {
System.out.println(a);
}