java如何覆盖动力
Java方法覆盖的基本概念
方法覆盖(Method Overriding)是面向对象编程中的一个重要特性,允许子类重新定义父类中已经存在的方法。覆盖的方法必须具有相同的名称、参数列表和返回类型。
方法覆盖的规则
子类中的方法与父类中的方法具有相同的方法签名(名称和参数列表)。返回类型可以是父类方法返回类型的子类型(协变返回类型)。访问修饰符不能比父类方法的访问修饰符更严格。例如,父类方法是protected,子类方法可以是public或protected,但不能是private。

示例代码
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 myAnimal = new Dog();
myAnimal.makeSound(); // Output: Dog barks
}
}
使用@Override注解
@Override注解用于明确指示该方法意图覆盖父类中的方法。如果该方法实际上没有覆盖父类方法,编译器会报错。这有助于避免拼写错误或其他错误。

注意事项
静态方法不能被覆盖,因为静态方法是与类关联的,而不是与对象关联的。如果子类中定义了与父类相同的静态方法,这称为方法隐藏(Method Hiding),不是覆盖。私有方法也不能被覆盖,因为它们在子类中不可见。
协变返回类型
从Java 5开始,覆盖方法的返回类型可以是父类方法返回类型的子类型。例如:
class Animal {
public Animal getAnimal() {
return new Animal();
}
}
class Dog extends Animal {
@Override
public Dog getAnimal() {
return new Dog();
}
}
异常处理
覆盖方法可以抛出与父类方法相同的异常、子类异常或不抛出异常。但不能抛出比父类方法更宽泛的检查异常。例如,父类方法抛出IOException,子类方法可以抛出FileNotFoundException(IOException的子类),但不能抛出Exception。






