Ответ
Статический полиморфизм (compile-time polymorphism) — это механизм, при котором конкретный метод для вызова определяется на этапе компиляции на основе сигнатуры (имени и типа параметров). В Java он реализуется через перегрузку методов (method overloading).
Как это работает: Компилятор анализирует типы аргументов, переданных в метод, и выбирает соответствующую версию перегруженного метода.
Пример перегрузки методов:
class Printer {
// Перегруженные методы с разными параметрами
public void print(String text) {
System.out.println("String: " + text);
}
public void print(int number) {
System.out.println("int: " + number);
}
public void print(String text, int times) {
for (int i = 0; i < times; i++) {
System.out.println(text);
}
}
}
// Использование
Printer p = new Printer();
p.print("Hello"); // Вызовет print(String)
p.print(42); // Вызовет print(int)
p.print("Hi", 3); // Вызовет print(String, int)
| Ключевые отличия от динамического полиморфизма (переопределения): | Критерий | Статический полиморфизм (Перегрузка) | Динамический полиморфизм (Переопределение) |
|---|---|---|---|
| Время разрешения | Во время компиляции | Во время выполнения (Runtime) | |
| Основа выбора | Сигнатура метода (имя + параметры) | Тип объекта (через instanceof) |
|
| Связь методов | В пределах одного класса | Между суперклассом и подклассом | |
| Ключевое слово | Не требуется | @Override (аннотация) |
Преимущество: Повышает производительность, так как решение о вызове метода принимается компилятором, а не виртуальной машиной во время выполнения.