过载(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](