Java如何覆盖
Java方法覆盖的基本概念
方法覆盖(Override)是面向对象编程中的一种特性,允许子类重新定义父类中已有的方法。覆盖的方法必须与被覆盖方法具有相同的名称、参数列表和返回类型(或子类型)。
覆盖的规则
- 方法名、参数列表和返回类型必须与父类方法一致。
- 访问修饰符不能比父类方法更严格(例如父类方法是
protected,子类方法可以是public或protected,但不能是private)。 - 子类方法可以抛出父类方法抛出的异常的子集,但不能抛出新的或更广泛的异常。
- 静态方法不能被覆盖(只能隐藏),私有方法也不能被覆盖。
覆盖的示例代码
class Parent {
public void display() {
System.out.println("Parent's display method");
}
}
class Child extends Parent {
@Override
public void display() {
System.out.println("Child's display method");
}
}
public class Main {
public static void main(String[] args) {
Parent obj = new Child();
obj.display(); // 输出 "Child's display method"
}
}
覆盖与重载的区别
- 覆盖(Override):子类重新定义父类的方法,方法签名必须一致。
- 重载(Overload):在同一个类中定义多个同名方法,但参数列表不同(与继承无关)。
使用@Override注解的好处
在子类方法上添加@Override注解可以确保该方法确实覆盖了父类的方法。如果方法签名不匹配,编译器会报错,避免因拼写错误或参数不匹配导致的逻辑错误。

注意事项
- 覆盖的方法可以通过
super关键字调用父类的实现。 - 如果父类方法是
final,则无法覆盖。 - 覆盖方法时,子类方法的返回类型可以是父类方法返回类型的子类(协变返回类型)。
class Animal {
public Animal getAnimal() {
return new Animal();
}
}
class Dog extends Animal {
@Override
public Dog getAnimal() {
return new Dog();
}
}





