欢迎访问宙启技术站
智能推送

对Java函数进行重载和覆盖的方法

发布时间:2023-06-23 10:59:27

Java函数重载和覆盖是Java编程中常用的两种方法。它们都涉及函数的多态性,即同一个函数名可以有多个实现方式。它们有一些共同点,也有一些差异。本文将分别从重载和覆盖这两个方面进行讲解。

一、Java函数重载

Java函数重载是指当一个类中有多个函数具有相同的名称,但是它们的参数列表不同,这样的函数就被称为重载函数。在重载函数的使用中,根据参数列表不同,编译器会自动选择使用哪一个函数。

1. 参数数量不同

重载函数的参数数量不同,就是指函数的参数个数不同,例如下面的代码:

public void sum(int x,int y){
    System.out.println(x+y);
}

public void sum(int x,int y,int z){
    System.out.println(x+y+z);
}

上述代码中的两个sum函数,一个是两个参数,一个是三个参数。当我们通过sum函数传递两个参数时,调用 个sum函数;当我们传递三个参数时就调用第二个sum函数。

2. 参数类型不同

重载函数的参数类型不同,指函数的参数类型不一样,例如下面的代码:

public void print(int x){
    System.out.println(x);
}

public void print(char x){
    System.out.println(x);
}

上述代码中的两个print函数,一个是int类型的参数,一个是char类型的参数。当我们通过print函数传递一个int类型的参数时,调用 个print函数;当我们传递一个char类型的参数时就调用第二个print函数。

3. 参数顺序不同

重载函数的参数顺序不同,就是指函数参数的顺序不一样,例如下面的代码:

public void func(int x,char y){
    System.out.println("x:"+x+" y:"+y);
}

public void func(char y,int x){
    System.out.println("y:"+y+" x:"+x);
}

上述代码中的两个func函数,一个是(int,char)类型的参数,一个是(char,int)类型的参数。当我们调用 个func函数时,传递int类型的参数在前,char类型的参数在后;当我们调用第二个func函数时,传递char类型的参数在前,int类型的参数在后。

二、Java函数覆盖

Java函数覆盖是指当继承关系中存在同名同参函数时,子类函数会修改掉父类同名函数的实现,这样的函数就被称为覆盖函数。在覆盖函数的使用中,当通过父类的引用调用一个和子类同名的函数时,会自动调用子类的函数。

1. 函数名称相同

覆盖函数的函数名称相同,就是指子类与父类的函数名称相同,例如下面的代码:

class Animal{
    void move(){
        System.out.println("动物跑");
    }
}
class Cat extends Animal{
    void move(){
        System.out.println("猫跑");
    }
}

上述代码中,Animal和Cat是继承关系,它们有相同名称的move函数。当我们通过Animal的引用调用move函数时,会调用Animal的move函数;当我们通过Cat的引用调用move函数时,会调用Cat的move函数。

2. 函数参数列表相同

覆盖函数的参数列表相同,就是指子类和父类的函数的参数列表相同,例如下面的代码:

class Animal{
    void test(int x){
        System.out.println("Animal test");
    }
}
class Cat extends Animal{
    void test(int x){
        System.out.println("Cat test");
    }
}

上述代码中,Animal和Cat是继承关系,它们的test函数有相同的参数列表。当我们通过Animal的引用调用test函数时,会调用Animal的test函数;当我们通过Cat的引用调用test函数时,会调用Cat的test函数。

3. 函数返回值类型相同

覆盖函数的返回值类型相同,就是指子类和父类的函数的返回值类型相同,例如下面的代码:

class Animal{
    int test(){
        System.out.println("Animal test");
        return 0;
    }
}
class Cat extends Animal{
    int test(){
        System.out.println("Cat test");
        return 1;
    }
}

上述代码中,Animal和Cat是继承关系,它们的test函数有相同的返回值类型。当我们通过Animal的引用调用test函数时,会调用Animal的test函数;当我们通过Cat的引用调用test函数时,会调用Cat的test函数。

总结

重载和覆盖是Java编程中经常使用的方法,两者都涉及到函数的多态性。重载是指在一个类中多个函数具有相同的名称,但参数列表不同;覆盖是指当继承关系中存在同名同参函数时,子类函数会修改掉父类同名函数的实现。两者各有不同的应用场景,需要灵活使用。在实际应用中,我们可以根据实际情况选择重载或覆盖方式来实现不同的需求。