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

Java中的函数重载和重写有什么区别?

发布时间:2023-08-07 04:28:26

函数重载(Overload)和函数重写(Override)是Java中两个重要的概念,它们都涉及到了方法的多态性,但是在具体的应用和实现上有很大的区别。

函数重载(Overload)指的是在同一个类中定义多个方法,它们具有相同的方法名,但是参数列表不同(包括参数类型、参数个数或者参数顺序)。在调用这些方法时,编译器会根据方法参数的类型、个数和顺序选择合适的方法进行调用。也就是说,函数重载实现了静态多态性(也称为编译时多态性),因为调用哪个方法是在编译时就已经确定了的。

函数重写(Override)指的是子类重新定义了父类中已经定义的同名方法,具有相同的参数列表。在调用这个方法时,实际调用的是子类中的方法,而不是父类中的方法。函数重写实现了动态多态性(也称为运行时多态性),因为调用哪个方法是在运行时根据实际对象的类型确定的。

函数重载主要用于提供多个方法完成相似的功能,但是参数类型或者参数个数不同。例如:

public class MathUtils {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}

在这个例子中,MathUtils类中定义了两个add方法,分别接收整数和浮点数类型的参数。当我们调用add方法时,编译器会根据传入的参数类型选择合适的add方法进行调用。

函数重写主要用于实现子类对父类中已有方法的重新实现,以满足子类的需求。例如:

public class Animal {
    public void makeSound() {
        System.out.println("Animal makes sound");
    }
}

public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Cat meows");
    }
}

在这个例子中,Animal类中定义了makeSound方法,而Cat类继承了Animal类,并且重写了makeSound方法。当我们调用makeSound方法时,实际执行的是Cat类中的makeSound方法,因为Cat类对象的类型是Cat。

总结起来,函数重载是指在同一个类中定义多个方法,它们具有相同的方法名,但是参数列表不同,主要用于提供多个方法完成相似的功能。而函数重写是指子类重新定义了父类中已经定义的同名方法,具有相同的参数列表,主要用于实现对父类方法的重新实现,以满足子类的需求。函数重载实现了静态多态性,函数重写实现了动态多态性。