多态方法命名应统一动词开头、体现行为意图且子类保持一致,返回类型须协变兼容并优先使用抽象类型,避免暴露实现细节或破坏契约。

多态方法本身不靠命名或返回类型来体现多态性,而是靠继承/实现 + 方法重写(@Override)+ 父类/接口引用调用实现的。因此,“规范多态方法的命名与返回类型”,本质是规范那些会被重写、参与多态行为的方法——也就是父类或接口中定义的抽象/非私有方法。
命名要体现行为意图,统一动词开头
多态方法名应聚焦“做什么”,而非“谁来做”。比如:
- ✅ 推荐:
draw()、calculateTax()、validate()、serialize() - ❌ 避免:
drawCircle()(太具体,限制子类)、dogBark()(带实现者身份)、doSomething()(语义模糊)
所有子类重写时保持方法名完全一致,这是多态能生效的前提。命名一旦定下,就构成契约的一部分——调用方只认这个名字,不关心背后是哪个类在执行。
返回类型必须兼容,优先使用抽象类型
重写方法的返回类型必须满足协变规则:子类方法的返回类型可以是父类方法返回类型的子类型(或相同),不能更宽泛。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 父类声明:
public Animal getPet() { ... } - 子类重写:
@Override public Dog getPet() { ... }✅ 允许(Dog是Animal子类) - 子类重写:
@Override public Object getPet() { ... }❌ 编译报错(Object比Animal更宽)
接口或抽象父类中,优先返回抽象类型(如 List<string></string> 而非 ArrayList<string></string>),让子类自由选择具体实现,同时保障调用方只依赖契约。
避免在多态方法中暴露实现细节
多态方法的签名(含名称、参数、返回类型)是对外承诺。不要因某个子类需要而扩大返回范围或增加参数:
- 不要为支持某子类加一个
boolean includeMetadata参数——这违反功能单一性,也破坏其他子类的语义 - 不要让一个
getReport()在某些子类返回String,另一些返回byte[]——返回类型不一致会导致编译失败或运行时异常 - 若确实需差异化行为,应通过新增方法(如
getReportAsText()/getReportAsPdf())或策略模式解耦,而非扭曲原有方法契约
接口方法尤其要精炼,拒绝过度设计
接口定义的是能力契约,不是实现蓝图。一个典型的多态接口方法应:
- 名称简洁明确(如
connect()、close()、process(T input)) - 参数尽量少(通常 ≤ 3 个),必要时封装为参数对象
- 返回类型直指用途(如
Optional<result></result>表示可能无结果,CompletableFuture<result></result>表示异步) - 不声明无关异常;受检异常只声明真正需要调用方处理的业务异常(如
throws InsufficientBalanceException),而非IOException这类底层细节
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










