子类不能覆盖“重载方法组”,但可覆盖其中某个具体签名的方法;继承的非私有重载方法均可直接使用,子类还可新增重载版本,与父类方法共存并参与编译期重载解析。

继承时,父类的重载方法本身不会被“覆盖”,因为重载(overload)只发生在同一个类内部,是编译期根据参数列表静态决定调用哪个方法;而覆盖(override)只针对继承链中同名、同参数、同返回类型的方法。所以问题核心其实是:子类如何与父类中已有的重载方法共存,以及能否、如何覆盖其中某一个重载版本。
子类无法“覆盖重载方法”,但可覆盖其中某个具体签名
重载是一组方法的集合,每个方法都有独立的签名。子类继承后,所有非私有的重载方法都可直接使用;若想修改其中某一个行为,只需在子类中定义一个与该方法**完全一致**(方法名 + 参数类型 + 参数顺序 + 返回类型)的方法——这就不是覆盖“重载”,而是覆盖“那个特定签名的方法”。
- 例如父类有:
void show(String s)和void show(int i)两个重载方法 - 子类可以只覆盖
show(String s),写一个一模一样的方法体,不影响show(int i)的调用 - 子类不能“覆盖整个重载组”,也不能靠改返回类型或访问修饰符来实现覆盖(会编译失败)
子类可新增自己的重载方法,与父类并存
子类可以在不干扰父类重载逻辑的前提下,添加自己独有的重载版本,这些新方法和继承来的重载方法共同构成子类可用的方法集。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 父类已有
void process(Object o) - 子类可新增
void process(String s)或void process(List> list),它们与父类方法构成新的重载关系 - 调用时仍按实参类型匹配最精确的重载版本(编译期绑定)
注意权限与异常约束,只对覆盖生效,不影响重载
覆盖要求子类方法访问权限 ≥ 父类对应方法,且抛出异常不能更宽泛——但这些规则仅适用于你实际去覆盖的那个方法签名,和父类其他重载方法无关。
- 若覆盖了
protected String get(int idx),子类必须用protected或public,不能用default或private - 若父类还有另一个重载方法
public Object get(String key),你没覆盖它,那它的权限和异常规则就完全不受影响 - 重载方法之间互不约束:一个用
public,另一个用protected完全合法
私有方法不参与重载传播,也不可被覆盖
父类中 private 方法即使被重载了,子类也看不见,自然无法调用、无法覆盖、也无法在其基础上新增重载。
- 父类定义了
private void log(String s)和private void log(Exception e) - 子类中写同名方法,只是定义了两个全新的方法,和父类无任何重载或覆盖关系
- 子类对象调用不到父类的这两个
private方法,哪怕通过super也不行
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










