过载(overload)和重载(override)是Java中两个重要的概念。它们都是实现多态性的关键。虽然它们的名字相似,但它们却有着不同的含义和应用场景。

过载(Overload)

过载是指在一个类中定义多个同名的方法,但这些方法的参数列表不同(参数的类型、个数或顺序)。当调用这个方法时,编译器会根据传入的参数选择合适的方法进行调用。这样做的好处是可以提高代码的复用性和可读性。

示例代码如下:

public class Calculator {
    
    public int add(int a, int b) {
        return a + b;
    }
    
    public double add(double a, double b) {
        return a + b;
    }
    
    public int add(int a, int b, int c) {
        return a + b + c;
    }
    
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        int sum1 = calculator.add(1, 2);
        double sum2 = calculator.add(1.5, 2.5);
        int sum3 = calculator.add(1, 2, 3);
        System.out.println("Sum1: " + sum1);
        System.out.println("Sum2: " + sum2);
        System.out.println("Sum3: " + sum3);
    }
}

在上面的示例代码中,Calculator类定义了三个名为add的方法,分别接受两个int类型的参数、两个double类型的参数和三个int类型的参数。在main方法中,我们分别调用了这三个方法,并输出了结果。

通过这个例子,我们可以看到通过方法的参数列表的不同,我们可以实现对不同类型的数值进行相加操作,从而提高了代码的复用性和可读性。

重载(Override)

重载是指在子类中定义一个与父类具有相同名称、相同返回类型和相同参数列表的方法。这样做的目的是为了修改或扩展父类方法的行为,实现多态性。

示例代码如下:

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

public class Dog extends Animal {
    
    @Override
    public void makeSound() {
        System.out.println("Dog barks.");
    }
    
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.makeSound();
        
        Dog dog = new Dog();
        dog.makeSound();
        
        Animal animal2 = new Dog();
        animal2.makeSound();
    }
}

在上面的示例代码中,Animal类定义了一个名为makeSound的方法。Dog类继承了Animal类,并重写了makeSound方法。在main方法中,我们分别创建了Animal类和Dog类的对象,并调用了它们的makeSound方法。

通过这个例子,我们可以看到即使是父类引用指向子类对象,调用的方法仍然是子类的方法,而不是父类的方法。这就是实现多态性的一种方式。

总结

过载和重载虽然名字相似,但它们有着不同的含义和应用场景。过载是指在一个类中定义多个同名的方法,通过方法的参数列表的不同实现不同的功能;重载是指在子类中定义一个与父类具有相同名称、相同返回类型和相同参数列表的方法,通过重写父类方法实现多态性。

通过合理使用过载和重载,我们可以提高代码的复用性和可读性,实现更加灵活和易于维护的程序设计。

参考资料

  • [Java Overloading and Overriding](
  • [Java Overloading and Overriding Tutorial with Examples](