在Java语言中,重载(Overload)和重写(Override)是两个非常重要的概念,但它们的实现机制、应用场景以及适用范围都是不一样的。
首先,重载指的是在同一个类中定义多个同名但参数类型或参数个数不同的方法,以适应不同的输入参数并及时返回不同的输出结果。在调用该方法时,编译器会根据所传参数的类型和数量自动选择调用哪一个匹配的方法,从而实现方法重载。
public class OverloadDemo { public void printNum(int num) { System.out.println("输入整数:" + num); } public void printNum(double num) { System.out.println("输入小数:" + num); } public void printNum(String num) { System.out.println("输入字符串:" + num); } public static void main(String[] args) { OverloadDemo obj = new OverloadDemo(); obj.printNum(10); // 调用第一个重载方法 obj.printNum(3.14); // 调用第二个重载方法 obj.printNum("Hello"); // 调用第三个重载方法 } }
其次,重写指的是子类重新定义了父类中已经存在的同名方法,并且参数列表和返回值类型都必须相同,这样子类对象在调用该方法时,实际上是调用了被重写后的子类方法,而不再是父类中原有的方法。
class Animal { public void shout() { System.out.println("动物发出叫声!"); } } class Dog extends Animal { @Override public void shout() { System.out.println("汪汪汪……"); } } public class OverrideDemo { public static void main(String[] args) { Animal obj1 = new Animal(); Animal obj2 = new Dog(); obj1.shout(); // 调用父类方法,输出“动物发出叫声!” obj2.shout(); // 调用子类方法,输出“汪汪汪……” } }
总之,重载和重写是Java语言中两个不同的概念,前者是一个类中多个同名方法的实现方式,后者则是继承关系中重写父类同名方法的实现方式。