重载必须发生在同一类中,方法名相同、参数列表不同;重写必须在父子类间且方法签名完全一致。子类中同名不同参的方法既非重载也非重写,仅为独立方法。

这是重载,不是重写。
重写(Override)必须发生在父子类之间,且要求方法名、参数列表、返回类型都一致(或满足协变规则)。而你描述的情况——子类中定义了一个与父类同名但参数列表不同的方法,它不满足重写的前提条件,因此属于在子类中独立定义的新方法,和父类方法构成重载关系(仅当它们在同一个类作用域内可见时才成立;但注意:严格来说,Java 中跨类的“重载”并不成立,因为重载只在编译期按调用点的引用类型解析,而子类中这个新方法对父类引用不可见)。
更准确地说:
- 如果这个方法写在子类里,父类也有一个同名方法但参数不同 → 它们不在同一个类中,所以不构成重载(重载必须在同一类中);
- 它也不是重写(因为参数列表不同);
- 所以它只是子类中一个独立的方法,和父类方法既不重载也不重写,只是名字碰巧相同。
关键看调用场景:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用子类引用调用:可以调到这个方法(如果参数匹配);
- 用父类引用调用:只能调到父类中已有的方法(子类新增的“不同参”方法不可见)。
H3 重载只发生在同一个类内部
- 必须是同一类中多个方法,名字相同、参数列表不同;
- 编译器根据调用时的实参类型和个数,在编译期就决定调哪个;
- 返回值、访问修饰符、异常声明都不影响重载判定。
H3 重写必须满足“两同两小一大”
- 方法名相同、参数列表相同(即方法签名完全一致);
- 返回类型≤父类(Java 5+支持协变);
- 抛出异常范围≤父类;
- 访问权限≥父类(如父类是protected,子类可public,但不能private);
- 父类方法不能是private、final、static。
H3 常见误解澄清
- ❌ “子类里写个同名不同参的方法就是重载” → 错,重载不跨类;
- ❌ “只要名字一样就是重写” → 错,参数列表必须一致;
- ✅ 判断依据永远是:是否在同一个类?是否继承关系?方法签名是否一致?
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










