Java overload和override的区别分析


在Java中,`overload`(重载)和`override`(重写)是两个关键概念,它们在面向对象编程中扮演着重要角色,但各自有着不同的含义和用途。

### Overload(重载)

- **定义**:在同一个类中,允许存在多个同名方法,只要它们的参数列表不同即可。参数列表的不同包括参数的类型、顺序或数量不同。

- **特点**:

- 是编译时多态的一种体现。

- 调用哪个方法取决于方法的参数列表。

- 方法的返回类型、访问修饰符可以不同,但这些不是构成重载的必须条件。

- 方法名必须相同。

- **示例**:


  public class Example {
      void display(int a) {
          System.out.println("Int: " + a);
      }

      void display(String s) {
          System.out.println("String: " + s);
      }
  }
  

### Override(重写)

- **定义**:在子类中,如果有一个方法与父类中的某个方法的名称、返回类型以及参数列表都相同,则子类中的该方法被认为是重写了父类中的方法。

- **特点**:

- 是运行时多态的一种体现。

- 子类重写的方法可以调用父类中被重写的方法(使用`super`关键字)。

- 子类重写的方法访问权限不能比父类中被重写的方法更严格。

- 方法名、参数列表以及返回类型(如果是子类重写的方法)必须相同。

- 如果父类方法为`final`或`private`,则子类不能被重写。

- **示例**:


  class Animal {
      void eat() {
          System.out.println("Animal eats food.");
      }
  }

  class Dog extends Animal {
      @Override
      void eat() {
          System.out.println("Dog eats meat.");
      }
  }
  

### 总结

- **Overload** 是同一类中方法的多态性表现,主要通过不同的参数列表来区分。

- **Override** 是子类与父类之间方法的多态性表现,要求方法名、参数列表及返回类型(如果是子类重写的方法)相同,主要通过对象的实际类型来区分调用哪个方法。