Java方法重写是多态核心机制,要求方法签名一致、访问权限不更严格、非final/static/private、异常声明不扩大,并支持协变返回;@Override注解用于编译期校验,确保正确重写。

Java中的方法重写(Override)是面向对象多态性的核心机制之一,它允许子类提供父类中已定义方法的具体实现。重写不是简单地“重新写一个同名方法”,而是有严格语义和编译期/运行期协同保障的机制——方法调用的实际执行版本,由对象的真实类型(运行时类型)决定,而非引用变量的声明类型。
只有当以下四个条件全部成立时,子类中的方法才被视为对父类方法的有效重写:
protected,子类不能用private或包级(默认);但可以更宽松(如改为public)从Java 5开始,重写方法的返回类型可以是父类方法返回类型的子类型。这叫协变返回,提升类型安全性且避免强制转型。
例如:
立即学习“Java免费学习笔记(深入)”;
class Animal { Animal get() { return new Animal(); } }
class Dog extends Animal { @Override Dog get() { return new Dog(); } } // 合法:Dog 是 Animal 的子类注意:基本类型和void不参与协变;返回类型必须是引用类型,且存在继承关系。
在子类方法上显式添加@Override注解,会让编译器主动检查该方法是否真正重写了父类(或接口)中的方法。一旦不满足重写条件(比如拼错方法名、参数类型不对、父类方法是private),编译直接报错。
这不是可选习惯,而是强烈推荐的实践——它能提前暴露设计错误,避免因“以为重写了其实没重写”导致的逻辑静默失效。
容易混淆的三个行为,关键区别在于发生时机和作用对象:
例如:Parent p = new Child(); p.staticMethod(); 调用的是Parent.staticMethod(),因为static方法被隐藏,而非重写。
以上就是Java里的方法重写是如何工作的_重写规则与限制解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号