Java 重写(Override)与重载(Overload)


Java中的方法既可以重写(Override)也可以重载(Overload)。这两个概念常常混淆,但它们是Java语言中非常重要的内容。

1. 重写(Override)

重写(Override)是指子类定义了一个与父类相同名称、参数类型也相同的方法,用于完全重写父类的实现。子类在调用该方法时,将执行该方法的子类实现,而不是父类中的实现。

重写方法的签名必须与被重写方法的签名相同,包括返回类型、方法名、参数列表、抛出的异常类型。但重写方法有更多灵活性,因为它可以具有父类方法的功能,也可以有自己的功能。因此,它被视为多态的一个重要机制。

重写方法示例:

class MyParent {
   public void showMessage() {
      System.out.println("Parent Method!");
   }
}

class MyChild extends MyParent {
   public void showMessage() {
      System.out.println("Child Method!");
   }
}

public class Test{
   public static void main(String[] args) {
      MyChild obj = new MyChild();
      obj.showMessage();
   }
}

输出结果为:Child Method!

2. 重载(Overload)

重载(Overload)是指定义了多个相同名称但参数列表不同的方法,用于处理不同的任务。当调用重载方法时,编译器将根据调用的参数类型和数量来决定使用哪个版本的方法。

重载方法的方法名必须相同,但参数列表必须不同。参数列表可以由参数的数量、类型或顺序来确定。返回类型可以相同,也可以不同。当在同一类中定义多个相同名称和不同参数列表的方法时,称其为方法重载。

重载方法示例:

class MyClass {
   public int add(int x, int y){
      return x + y;
   }
   public int add(int x, int y, int z) {
      return x + y + z;
   }
}

public class Test{
   public static void main(String[] args) {
      MyClass obj = new MyClass();
      System.out.println(obj.add(10, 20));
      System.out.println(obj.add(10, 20, 30));
   }
}

输出结果为:

30
60

区别

重写和重载在方法实现方面有些不同,重写是在父类的方法已经被实现的情况下,在子类中进行重新实现或修改。重载是在同一个类中实现的,通过不同参数列表实现方式的不同。

另一个区别是,重写只能对原来存在的方法覆盖,而重载是在同一类中定义多个相同名称和不同参数列表的方法。重写改变了原来方法的实现,而重载仅使方法更灵活,使用时能根据指定的参数计算出期望的值。理解这两种方法,可以更好地使用Java类库,并为您的代码添加更多的功能和灵活性。

总之,重载和重写是Java编程中两个必需的特性。使用这两种技术,可以实现更好的控制和实现更多的灵活性.