不加 @Override 注解会导致方法重写失败却无编译错误,拼写、大小写或参数偏差均被忽略,引发运行时 NullPointerException 或逻辑异常;加上后编译器强制校验签名匹配,错误即时暴露并精准定位。
不加 @Override 注解本身不会让代码出错,但会让方法名拼写错误、参数遗漏、大小写偏差等低级失误悄悄通过编译——结果是子类方法根本没被重写,父类逻辑照常执行,关键初始化或业务逻辑被跳过,bug直到运行时才暴露。
比如父类有 initConfig(),子类误写成 initConfg()。没有 @Override 时,编译器把它当作全新方法,不报错也不调用;父类中依赖该方法赋值的 timeout、baseUrl 等字段保持默认值或 null,后续调用直接抛 NullPointerException 或行为异常。
onCreate 写成 oncreate)→ 同样无法触发重写加上注解后,编译器立刻验证:这个方法是否真能在父类或接口中找到完全匹配的声明。不匹配就编译失败,错误信息直指问题根源。
method does not override or implement a method from a supertype —— 这不是警告,是明确告诉你“你写的这个方法,父类根本没有”@Override 后会自动弹出可重写方法列表,选中即生成完整正确签名靠记忆和手敲永远不可靠,尤其在重构或快速复制粘贴时。必须把校验环节前置到编码动作中。
立即学习“Java免费学习笔记(深入)”;
@Override 的方式Ctrl + O(Windows/Linux)或 Cmd + O(macOS),Eclipse 用 Source → Override Methods
@Override
不用翻父类源码,几秒就能验证:
Ctrl(或 Cmd)点击 —— 能跳转到父类对应方法,说明重写成功;跳不过去,大概率是拼写或签名问题private、static 或 final —— 这三类方法根本不允许重写,加了 @Override 会立刻报错,不加反而埋雷implements 该接口,且 JDK 版本 ≥ 1.8(避免旧版本兼容性问题)