Java函数的重载和重写的区别以及适用场景
Java是一种面向对象语言,其中的函数(也称方法)是面向对象的核心。Java中的函数有两种常见的概念,重载和重写。
重载
重载指的是一个类中有多个函数名称相同,但参数类型、返回类型或参数的个数不同。在Java中,重载函数必须拥有相同的名称,但它们可以有不同的参数个数、类型和返回类型。当程序调用一个重载函数时,它会根据传递给函数的参数的数量和类型来自动确定应该使用哪个函数。
以下是一个重载函数的示例:
public class OverloadExample {
public static void print() {
System.out.println("Printing from print()");
}
public static void print(String message) {
System.out.println("Printing from print(String message): " + message);
}
public static void print(int number) {
System.out.println("Printing from print(int number): " + number);
}
}
上面的代码定义了三个名为"print"的函数,但每个函数的参数类型和返回类型都不同。这个例子展示了如何在Java中实现函数重载。在调用以上类的三个不同的函数时,Java虚拟机根据传递给函数的参数的数量和类型来自动识别调用哪个函数。
重载函数适用场景:
1.需要处理稍微不同但是逻辑上有联系的任务。
2.操作的目的相同,但是需要为不同类型的数据采取不同的处理方式。
3.需要提供不同的参数类型。
重写
重写是当一个子类类继承了父类后,如果子类中的一个函数和父类中的函数名称、参数列表都相同,但是子类中的函数处理逻辑不同,那么在子类中重写该函数,这种操作就是重写。对于被重写的方法,子类能够使用父类提供的实现方法,同时也能够自己定义新的实现方法,以覆盖从父类继承得到的方法。
以下是一个重写函数的示例:
public class Shape {
protected double area() {
return 0;
}
}
public class Circle extends Shape {
private double radius;
public double area() {
return Math.PI * Math.pow(radius, 2);
}
}
上面的代码演示了子类如何重写父类中的函数。在这个例子中,Shape类有一个名为"area"的方法,但是它返回0。Circle类继承了Shape类,并重写了父类的"area"方法,根据圆的半径来计算圆的面积。
重写函数适用场景:
1.在孩子类中实现一个和父类名称、参数列表都一样但是实现方式不一样的方法,以满足不同的需求。
2.子类向父类转型,重写父类中定义的某个方法,以增加或修改其行为。
3.通过改写父类的方法,从而实现自己的业务逻辑。
总结
Java中的函数有两种常见的概念,分别是重载和重写。重载指的是一个类中有多个函数名称相同,但参数类型、返回类型或参数的个数不同。而重写是指子类继承了父类后,如果子类中的一个函数和父类中的函数名称、参数列表都相同,但是子类中的函数处理逻辑不同,那么在子类中重写该函数。在适当的场景下,重载和重写都可以提高代码的可读性、可维护性、可扩展性和代码的复用性。
