Java函数的重载与重写,二者区别与应用举例
Java中的函数重载和函数重写是两个非常重要的概念。虽然它们的名字十分相似,但实际上它们是两个不同的概念,应用于不同的场合。
函数重载(Overloading)
函数重载是指在同一个类中定义多个同名但参数类型或参数个数不同的函数,从而实现不同的功能。Java编译器会根据方法的参数类型和数量来确定应该调用哪个函数。
例如在下面的代码中,我们定义了两个名为getSum的函数,一个是用于计算两个整数之和,另一个是用于计算三个整数之和。
public class Demo {
public static int getSum(int a, int b) {
return a + b;
}
public static int getSum(int a, int b, int c) {
return a + b + c;
}
}
函数重载的优点是可以实现代码的复用,减少代码量,提高代码的可读性和可维护性。
函数重写(Overriding)
函数重写是指子类重新定义父类中已有的方法,使得在子类中调用该方法时执行子类中的方法,而不是执行父类中的同名方法。函数重写的作用在于修改继承于父类中的一般方法,以便它们适合于子类的特定需求。
例如,在下面的代码中,我们定义了一个名为getName的函数,该函数在父类Person中已有定义。子类Student重新定义了该函数,使得在使用该函数时,执行的是子类中的getName函数。
class Person {
protected String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
class Student extends Person {
private String school;
public Student(String name, String school) {
super(name);
this.school = school;
}
@Override
public String getName() {
return this.name + " from " + this.school;
}
}
函数重写的作用是在子类中更改或扩展继承来的方法,使其更适合子类的需求。函数重写还能够实现多态性,即当父类类型的变量引用子类类型的对象时,调用的是子类中覆盖父类方法的内容。
二者区别
函数重载和函数重写虽然名字相似,但实际上是不同的概念。它们的区别在以下几点:
参数不同:函数重载是指在同一个类中定义多个同名但参数类型或参数个数不同的函数,而函数重写是子类重新定义父类中已有的方法。
实现不同:函数重载是在同一个类中实现多个同名函数,而函数重写是在子类中重新实现父类中的方法。
调用方式不同:函数重载是根据方法的参数类型和数量来确定应该调用哪个函数,而函数重写是根据对象所属的实际类型来确定应该调用哪个方法。
应用举例
函数重载通常用于实现功能相似但参数不同的方法,例如:
- Math类的pow函数,可以计算一个数的n次方或e的次方
- ArrayList类的add函数,可以添加一个元素到列表中或插入一个元素到指定位置
函数重写通常用于在子类中修改或扩展继承来的方法,例如:
- 继承父类中的比较函数,在子类中扩展比较的维度(例如认为学校更重要)
- 继承父类中的输入输出函数,在子类中改变输入输出的格式或方式
总之,函数重载和函数重写都是非常重要的概念,在Java的面向对象编程中应用广泛,理解并熟练运用这两个概念可以提高代码的可读性和可维护性。
