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