Ответ
Да, перегрузка методов (method overloading) является формой статического (compile-time) полиморфизма.
Что такое перегрузка? Это возможность определять несколько методов в одной области видимости с одинаковым именем, но разными параметрами (тип, количество или порядок).
Пример:
class MathUtil {
// Перегруженные методы add
static int add(int a, int b) {
return a + b;
}
static double add(double a, double b) {
return a + b;
}
static int add(int a, int b, int c) {
return a + b + c;
}
}
// Использование:
int sum1 = MathUtil.add(5, 10); // Вызовется add(int, int)
double sum2 = MathUtil.add(5.5, 2.3); // Вызовется add(double, double)
Ключевые характеристики статического полиморфизма через перегрузку:
- Разрешение на этапе компиляции: Компилятор однозначно определяет, какой метод вызвать, на основе сигнатуры (имя + аргументы).
- Не зависит от типа объекта времени выполнения.
- Возвращаемый тип не учитывается при перегрузке (два метода с одинаковыми параметрами, но разным возвращаемым типом, приведут к ошибке компиляции).
Контраст с динамическим полиморфизмом:
- Перегрузка (Static Polymorphism): Решение принимает компилятор. Один класс, много методов с одним именем.
- Переопределение (Dynamic Polymorphism / Overriding): Решение принимает JVM во время выполнения (runtime). Родительский класс и подклассы, один метод, разная реализация.