在 Java 面向对象编程中,方法重写(Override)方法重载(Overload)是两个容易混淆的概念,它们都能实现代码的复用和灵活性,但应用场景和实现方式有所不同。

方法重写是指子类重新定义父类中已有的非私有方法,以改变方法的具体行为。重写要求子类方法与父类方法具有相同的名称、参数列表和返回类型(Java 5 后允许返回类型是协变的)。

例如,定义一个名为 Animal 的父类和一个名为 Cat 的子类,Cat 类继承了 Animal 类。Animal 类中有一个名为 move() 的方法,Cat 类可以对这个方法进行重写:

class Animal {
    public void move() {
        System.out.println("动物可以移动");
    }
}

class Cat extends Animal {
    @Override
    public void move() {
        System.out.println("猫可以走和跑"); 
    }
}

Cat 类中,使用相同的名称和参数列表重新定义了 move() 方法,并使用 @Override 注解向编译器说明这是一个重写方法。

方法重载是指在同一个类中定义多个同名方法,但这些方法的参数列表必须不同(参数类型或个数不同)。

方法重载可以根据不同的参数类型或个数执行不同的逻辑,增强了代码的灵活性和可读性。

区别:

  • 适用范围: 重写发生在继承关系中,重载发生在同一个类中。
  • 方法名称: 重写要求方法名相同,重载也要求方法名相同。
  • 参数列表: 重写要求参数列表相同,重载要求参数列表不同。
  • 返回类型: 重写要求返回类型相同或协变,重载对返回类型没有限制。

方法重写和重载是 Java 中重要的多态性体现,理解它们的区别和应用场景对于编写可维护和可扩展的代码至关重要。