方法重载体现编译时多态,调用版本在编译期根据参数类型静态绑定,不依赖运行时对象状态;它通过同一方法名、不同参数实现语义适配,与重写解决的运行时动态分派问题分属不同层级。

方法重载体现的是编译时多态,它的“静态特性”指:调用哪个重载版本,在代码编译完成那一刻就已确定,不依赖程序运行时的对象状态。
重载的多态性来自“同一方法名,不同参数语义”
重载不是为了替换行为,而是为同一操作提供多种输入适配方式。比如 add(int, int) 和 add(double, double) 都叫 add,但语义不同——前者做整数加法,后者做浮点加法。编译器根据你传入的字面量类型或变量声明类型,直接选出最匹配的那个版本,整个过程不查对象、不看继承关系、不等运行。
静态性体现在编译期绑定,与运行时无关
- 变量声明类型决定重载选择: Object obj = "hello"; print(obj); 一定调用 print(Object),哪怕 obj 实际是 String
- 泛型擦除后类型信息丢失: List<String> 和 List<Integer> 在重载中都被视为 List,无法区分
- 自动装箱会引入隐式候选:传 int 可能匹配 method(int)、method(long) 或 method(Integer),编译器按固定优先级选,全程无运行时参与
它和“运行时多态”不在一个层级上
重载解决的是“调用哪一份签名”的问题,属于前端解析;重写解决的是“执行哪一个实现”的问题,属于后端分派。两者协同:先靠重载选签名(静态),再靠重写找实现(动态)。例如:List<String> list = new ArrayList<>(); list.add("x"); —— 编译器凭 list 的声明类型 List 和参数 String 锁定 add(E) 签名;JVM 运行时才根据实际对象是 ArrayList 去执行它的 add 方法体。前者是重载的静态多态,后者是重写的动态多态。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
重载的多态,本质是语言对人类表达习惯的让步:允许同名不同义,而把分辨责任交给编译器——稳、快、可预测。
立即学习“Java免费学习笔记(深入)”;

















