强制捞起父类的核心资产指子类重写方法或构造时必须通过super显式调用父类关键逻辑,包括基线行为、框架契约和私有状态初始化;构造器中super()须首行调用;方法重写应先super再增强;访问父类非private字段用super.或getter。

“强制捞起父类的核心资产”这个说法很形象,其实指的就是在子类重写方法时,**不丢弃、不绕过父类已有的关键逻辑**,而是通过 super 显式调用它,把父类的初始化、校验、状态设置、资源准备等不可替代的部分稳稳接住。
明确什么是“核心资产”
它不是泛指所有父类代码,而是那些:
- 被设计为基线行为的逻辑(比如
save()中的事务开启、toString()中的基础字段拼接); - 涉及框架契约的部分(如 Spring 的
afterPropertiesSet()、Android 的onCreate()); - 父类私有状态依赖的入口(即使字段是
private,其初始化往往藏在super()或super.method()里)。
构造器中必须“先捞”父类初始化
这是最刚性的场景:子类对象内存布局包含父类部分,而该部分必须由父类构造器完成初始化。漏掉或错位,等于让核心资产“没加载就运行”。
-
super()或super(...)必须是子类构造器第一行; - 若父类只有带参构造器,子类必须显式传参调用,不能依赖默认插入;
- 不要用
this()绕开 ——super()和this()互斥,且this()委托链最终也得落到super()上。
方法重写中“复用+增强”,别只覆盖不继承
当子类重写 public void doWork(),真正要做的不是另起炉灶,而是:
- 先执行
super.doWork()—— 把父类校验、预处理、上下文准备等拉进来; - 再叠加子类特有逻辑(比如加日志、改参数、后置清理);
- 注意方法签名一致性:如果父类
doWork(String mode, boolean force),子类重写时也得接收同样参数,并原样透传给super.doWork(mode, force)。
访问被遮蔽的父类字段,靠 super. 而非猜测
当父类有 protected String code = "BASE";,子类又声明了同名字段 String code = "SUB";,这时:
- 直接写
code拿到的是子类值; - 写
super.code才能稳定读取父类原始赋值(注意:这仅对非private字段有效); - 更健壮的做法是父类提供
protected String getBaseCode() { return code; },子类调super.getBaseCode()—— 避免字段直读的脆弱性。











