Java中函数的方法重写与方法重载区别
Java编程语言中的方法重写与方法重载是常见的概念,但是它们是不同的概念,它们各自适用于不同的情况。在Java中,方法重载和方法重写都是将多态性应用于方法的一个例子。
方法重载和方法重写都是Java中的重要概念,它们主要用于定义类的行为,但它们之间还是有很大的区别。
1、函数重载(Method Overloading)
函数重载(Method Overloading)指的是在同一个类里面,有多个方法对应着同一个方法名,但这些方法的参数列表不同。方法的参数要么是数量不同,要么是类型不同。函数重载是静态绑定(编译时绑定)的。
举个例子,假如我们现在要定义一个类来计算一些数的和,但是这些数有两种可能的数据类型,整数和浮点数。那么我们就可以定义两个不同参数类型的加法方法:
public class Adder{
public int add(int a, int b){
return a + b;
}
public double add(double a, double b){
return a + b;
}
}
函数重载在编写代码的时候非常常用,它可以让我们方便地写出多个同名函数,从而提高了代码重用性。
2、函数重写(Method Overriding)
函数重写(Method Overriding)指的是在子类中定义一个与父类中具有相同名称、返回值类型和参数列表的方法,子类方法必须与父类方法的修饰符完全一致或更为宽松。函数重写是动态绑定(运行时绑定)的。
举个例子,在父类 Animal 中定义了一个 eat() 方法,现在我们需要在子类 Cat 中重写这个方法:
class Animal{
public void eat(){
System.out.println("I can eat something.");
}
}
class Cat extends Animal{
public void eat(){
System.out.println("I can eat cat food.");
}
}
在子类重写父类方法时,子类方法的访问修饰符必须与父类方法相同或更为宽松,这是由于子类重写父类方法是通过多态性发生的,因此必须保证子类方法可以替代父类方法。
总结:
函数重载和函数重写都是Java中多态性的表现之一。函数重载是指定义多个同名函数,但是它们的参数列表不同;函数重写是指在子类中定义一个与父类中的同名方法,但是具有不同的实现。函数重载是编译时绑定的,函数重写是运行时绑定的。重载时方法名相同,重写时方法名和参数列表相同。对于方法重载,Java编译器会根据用户调用的方法,选取最符合要求的一个来进行函数调用;对于方法重写,Java虚拟机会根据对象的实际类型来确定要调用的方法。
