Java中重写父类方法的核心是子类提供同签名新实现以支持多态,必须同时满足四条件:方法签名完全一致、返回类型协变、访问权限不更严格、检查异常不扩大;private、static、final方法不可重写;必须用@Override注解校验,可通过super调用父类逻辑实现增强。

Java 中继承后重写父类方法,核心是用子类提供同签名的新实现来替换或增强父类逻辑,从而支持多态。关键不在“能不能写”,而在于“怎么写才合法、安全、可维护”。
重写必须满足的硬性条件
只有同时满足以下四点,编译器才认可这是合法重写,否则报错:
- 方法签名完全一致:方法名、参数个数、每个参数的类型和顺序,必须和父类一模一样;
-
返回类型相同或更具体(协变返回):比如父类返回
Animal,子类可返回Dog(Dog是Animal的子类),但不能返回Object; -
访问权限不能更严格:父类是
protected,子类只能用protected或public;父类是public,子类不能降为private或包私有; -
异常声明不能扩大:子类方法抛出的检查型异常,必须是父类所声明异常的子类,或不抛出;例如父类声明
IOException,子类可声明FileNotFoundException,但不可声明Exception。
哪些方法根本不能重写
三类方法在语法层面就禁止被重写:
- private 方法:子类不可见,谈不上重写;
-
static 方法:属于类而非实例,子类定义同名
static方法是“隐藏”(hiding),不是重写; - final 方法:明确禁止覆盖,编译器直接拦截。
必须加 @Override 注解
这不是可选项,而是强制建议:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 让编译器帮你校验:是否真有可被重写的父类方法;
- 避免拼写错误(如
toSting())、参数少写或多写,导致“看似重写实则新增”; - 提升可读性,一眼看出这个方法是用来定制父类行为的。
重写时如何复用父类逻辑
重写 ≠ 从头写。多数场景需要在父类基础上做增强,这时用 super.方法名() 显式调用:
-
前置增强:先做子类特有逻辑(如参数校验、日志记录),再调用
super.method(); -
后置增强:先调用
super.method(),再追加处理(如结果封装、缓存更新); -
条件性委托:根据子类状态决定是否调用父类,或走不同分支(如
if (isCached) { return cached; } else { return super.load(); })。
注意:super 只能在非静态方法中使用,且不能在父类构造器中调用可能被子类重写的方法——此时子类字段尚未初始化,极易引发空指针。

















