Java函数重载与重写的区别
Java是一门面向对象的编程语言,它支持两种对象行为的继承方式:重载(overloading)和重写(overriding)。在理解这两者之间的差异之前,让我们首先来了解一下它们的含义。
函数重载(overloading)
函数重载是指一组具有相同函数名,但参数数量、类型或顺序不同的函数。在执行某个函数时,Java会根据参数数量、类型以及顺序来确定要执行的具体函数。函数重载的目的是在不同的情况下,能够使用同一个函数名来调用不同版本的函数,使代码更加灵活,方便使用。
函数重载的例子:
public class OverloadingExample {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(add(a, b));
double c = 1.5;
double d = 2.5;
System.out.println(add(c, d));
}
public static int add(int a, int b) {
return a + b;
}
public static double add(double a, double b) {
return a + b;
}
}
函数重载的优点:
1. 同样的函数名可以用于接受不同类型的参数,可以减少命名冲突。
2. 可以为相同的函数名提供不同的功能,程序更易读懂。
3. 可以运用多态的特性,增强代码的灵活性、可扩展性。
函数重写(overriding)
函数重写是指在子类中重新定义父类中已有的方法的实现。Java中通过继承的方式可以实现函数重写,子类通过重写父类的方法来获得特定的行为。
函数重写的例子:
public class Circle {
double radius;
void area() {
System.out.println("The area of the circle is: " + radius * radius * Math.PI);
}
}
public class NewCircle extends Circle {
double radius;
void area() {
System.out.println("This is the area of new circle:" + radius * radius * 3.14);
}
}
public class TestCircle {
public static void main(String args[]) {
Circle c1 = new Circle();
c1.radius = 3.5;
c1.area();
NewCircle c2 = new NewCircle();
c2.radius = 3.5;
c2.area();
}
}
函数重写的优点:
1. 可以避免子类与父类方法名相同,但不具备相似功能的情况。
2. 父类的方法可能不适用于所有情况,子类重写方法后能够为子类提供更加准确的行为。
3. 提供了多态的实现,使程序更加灵活,可扩展性更好。
函数重载与重写的不同点
1. 字符串、Class对象和基本数据类型等不能被重载。
2. 函数重载是在同一个类中定义的,而函数重写则是在不同的类中定义的。
3. 函数重载是在编译时确定的,而函数重写是在运行时确定的。
4. 函数重载是根据参数的类型、个数和顺序来区分的,而函数重写是根据子类中方法的具体实现来区分的。
总结
Java中函数重载和重写的区别在于,函数重载是在同一个类中,根据参数类型、个数和顺序来判断实际调用的方法的功能。而函数重写是在不同的类中,子类提供了与父类相同的方法名,但使用不同的实现来实现相似的功能。因此,它们都是实现多态的重要手段,可以让程序更加灵活、易于扩展。
