Что такое статический полиморфизм?

«Что такое статический полиморфизм?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Статический полиморфизм (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 (аннотация)

Преимущество: Повышает производительность, так как решение о вызове метода принимается компилятором, а не виртуальной машиной во время выполнения.