欢迎访问宙启技术站
智能推送

Java函数重载与重写的区别

发布时间:2023-05-19 12:11:41

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中函数重载和重写的区别在于,函数重载是在同一个类中,根据参数类型、个数和顺序来判断实际调用的方法的功能。而函数重写是在不同的类中,子类提供了与父类相同的方法名,但使用不同的实现来实现相似的功能。因此,它们都是实现多态的重要手段,可以让程序更加灵活、易于扩展。