Java函数的重载和重写有何区别?
Java函数的重载和重写是Java编程语言中非常基础的概念,它们都是通过不同的方式实现了函数的多态性。
1. 函数重载
函数重载是指在同一个类中,可以定义多个同名的函数,但是这些函数的参数列表必须不同,即参数数量、类型或者顺序不同。在调用这些同名函数时,编译器会根据传递给函数的参数进行区分,然后选择最符合参数列表的函数进行调用。函数重载可以提高代码的复用性,让代码更加简洁明了。
如下示例代码:
public class DemoOverload {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public String add(String a, String b) {
return a + b;
}
}
以上示例代码中,我们定义了三个同名函数add,但是每个函数所接收的参数类型不同。调用这三个函数时,根据传递的参数类型的不同,Java编译器会选择最符合参数类型的函数进行调用。
2. 函数重写
函数重写是指在子类中可以重新定义与父类中同名、参数列表相同的函数,但是子类中的函数体不能与父类中的函数体相同。这样做可以让子类重新实现继承自父类的方法,从而满足子类自身的特定需求,并且可以增加代码复用性和可维护性。
如下示例代码:
public class Animal {
public void run() {
System.out.println("动物在奔跑");
}
}
public class Cat extends Animal {
@Override
public void run() {
System.out.println("猫在奔跑");
}
}
以上示例代码中,我们定义了一个父类Animal和一个子类Cat,其中Animal类中定义了一个run函数,而子类Cat中重写了这个函数。使用子类对象调用run函数时,会根据重写后的子类函数进行调用。
综上所述,函数重载和函数重写虽然名字相似,但是它们的实现方式和作用不同。函数重载是在同一个类中,定义多个同名函数,参数列表不同,可以提高代码的复用性;而函数重写是在子类中重新定义与父类同名的函数,可以满足子类自身的特定需求,而且增加了代码复用性和可维护性。
