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

讲解Java的函数重载和函数重写

发布时间:2023-09-30 09:23:38

函数重载和函数重写是Java中面向对象的两个重要的特性。它们都涉及到了方法的重定义,但在不同的场景下有不同的用途和实现方式。

1. 函数重载(Overloading)

函数重载是指在同一个类中,可以定义多个方法,它们具有相同的名称但具有不同的参数列表。在调用这些方法时,根据传入的参数类型和数量的不同,编译器会根据一定的规则选择合适的方法进行调用。

函数重载的特点:

- 方法名相同

- 参数列表不同

- 返回类型可以相同也可以不同

例如,一个类可以有多个同名的构造方法,它们可以通过接受不同数量或类型的参数进行初始化:

public class MyClass {
    private int x;
    private int y;
    
    public MyClass() {
        this.x = 0;
        this.y = 0;
    }
    
    public MyClass(int x, int y) {
        this.x = x;
        this.y = y;
    }
    
    // ...
}

在上面的例子中,MyClass类中定义了两个同名的构造方法:一个无参数的构造方法用于初始化对象的默认值,另一个接受两个int型参数的构造方法用于自定义初始化。

2. 函数重写(Overriding)

函数重写是指在子类中重新定义(覆盖)了父类中的方法,使得子类可以根据自己的需求对该方法进行重写。重写的方法与被重写的方法具有相同的名称、参数列表和返回类型。

函数重写的特点:

- 方法名相同

- 参数列表相同

- 返回类型相同

例如,一个父类定义了一个计算面积的方法:

public class Shape {
    protected double calculateArea() {
        return 0;
    }
    
    // ...
}

然后,子类可以通过重写父类的calculateArea方法来自定义计算面积的逻辑:

public class Rectangle extends Shape {
    private double width;
    private double height;
    
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }
    
    @Override
    protected double calculateArea() {
        return width * height;
    }
    
    // ...
}

在上面的例子中,Rectangle类继承自Shape类,并重写了父类的calculateArea方法来计算矩形的面积。

总结:

- 函数重载用于在同一个类中定义具有相同方法名但不同参数列表的多个方法,便于根据不同的需求进行调用。

- 函数重写用于子类中重新定义父类中的方法,使得子类可以根据自己的需求对该方法进行自定义实现。