方法重载(Method Overloading)是指在一个类中可以定义多个同名的方法,但这些方法的参数列表(参数类型、参数个数或参数顺序)必须不同。在调用这些同名方法时,Java编译器会根据传入的参数的类型、个数和顺序来匹配调用相应的方法。
下面是一个简单的方法重载示例:
public class OverloadingExample {
// 方法重载,接受一个整数参数
public static void printNumber(int num) {
System.out.println("Integer number: " + num);
}
// 方法重载,接受一个浮点数参数
public static void printNumber(double num) {
System.out.println("Double number: " + num);
}
// 方法重载,接受一个字符串参数
public static void printNumber(String num) {
System.out.println("String number: " + num);
}
public static void main(String[] args) {
printNumber(10); // 调用接受整数参数的方法
printNumber(10.5); // 调用接受浮点数参数的方法
printNumber("10"); // 调用接受字符串参数的方法
}
}
在上面的例子中,printNumber
方法被重载了三次,分别接受一个整数、一个浮点数和一个字符串参数。在 main
方法中,我们分别调用了这三个方法,根据传入的参数类型来决定调用哪个重载的方法。
方法重写(Method Overriding)是指在子类中重新定义(覆盖)父类中已经存在的方法,方法名、参数列表和返回类型必须与父类中被重写的方法一致。通过方法重写,子类可以改变父类中方法的行为,实现多态性。
下面是一个简单的方法重写示例:
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
// 重写父类中的sound方法
public void sound() {
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
animal.sound(); // Output: Animal makes a sound
Dog dog = new Dog();
dog.sound(); // Output: Dog barks
}
}
在上面的例子中,Animal
类有一个 sound
方法,Dog
类继承了 Animal
类,并重写了 sound
方法。当创建 Dog
类的实例并调用 sound
方法时,将会调用 Dog
类中的 sound
方法,而不是 Animal
类中的。
方法重载和方法重写的区别在于:
- 方法重载是在同一个类中定义多个同名方法,这些方法的参数列表必须不同。而方法重写是子类重新定义父类中已经存在的方法。
- 方法重载是静态绑定(编译时绑定),在编译阶段确定调用哪个方法。方法重写是动态绑定(运行时绑定),在运行时根据对象的实际类型确定调用哪个方法。