子类重新定义父类方法需满足:方法名、参数列表相同,返回类型兼容,访问权限不更严格,且不能覆盖final、private或static方法。使用@Override注解可确保正确覆盖。示例中Dog类覆盖Animal的makeSound方法,通过多态实现运行时动态调用,体现面向对象核心特性。
在Java中实现方法覆盖(Override)是指子类重新定义父类中已有的方法,以提供不同的实现。要正确实现方法覆盖,必须遵循一些语法规则和最佳实践。
要成功覆盖一个方法,需满足以下条件:
建议在子类方法上使用 @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");
}
}
方法覆盖是实现运行时多态的关键。程序在运行时会根据对象的实际类型调用相应的方法。
示例:
Animal myPet = new Dog(); myPet.makeSound(); // 输出 "Dog barks"
尽管引用类型是 Animal,但实际对象是 Dog,因此调用的是 Dog 类中的 makeSound 方法。
以下情况方法无法被覆盖:
基本上就这些。只要确保方法签名一致、访问级别合理,并善用 @Override 注解,就能安全有效地实现方法覆盖。