JAVA 方法重载

方法重载

英文 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);
}

原文出处:/show_1EF4rByRDWJR.html