java如何重写方法

方法重写的基本概念
方法重写(Override)是面向对象编程中的重要特性,允许子类重新定义父类中已有的方法,以满足子类的特定需求。重写的方法必须与父类方法具有相同的名称、参数列表和返回类型(或子类返回类型)。
重写方法的规则
- 方法签名一致:方法名、参数列表必须与父类方法完全相同。
- 访问权限不能更严格:子类方法的访问修饰符不能比父类方法更严格(例如父类方法是
protected,子类可以是public或protected,但不能是private)。 - 返回类型协变:Java 5+ 支持返回类型为父类方法返回类型的子类(协变返回类型)。
- 异常限制:子类方法抛出的异常不能比父类方法更宽(只能是父类异常的子类或不抛出异常)。
@Override注解:建议显式添加此注解,编译器会检查是否符合重写规则。
示例代码
class Animal {
public void makeSound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
myDog.makeSound(); // 输出 "Dog barks"
}
}
注意事项
- 静态方法(
static)不能被重写,只能隐藏(通过子类重新定义)。 - 私有方法(
private)和 final 方法(final)无法重写。 - 重写方法时,子类方法可以通过
super关键字调用父类方法(例如super.makeSound())。
常见问题
- 重载 vs 重写:重载是同一类中方法名相同但参数不同,重写是子类对父类方法的重新实现。
- 动态绑定:运行时根据对象实际类型调用方法(多态的核心机制)。







