Объясните принцип статической диспетчеризации и её отличие от динамической

Статическая диспетчеризация — это механизм выбора вызываемой функции или метода на этапе компиляции.

Короткий ответ

Что ответить на собеседовании

Статическая диспетчеризация — это механизм выбора вызываемой функции или метода на этапе компиляции. Компилятор определяет, какую именно реализацию вызвать, исходя из типа переменной или контекста вызова. Это обеспечивает более быструю работу, так как вызов не требует дополнительного поиска во время выполнения.

Подробный разбор

Ответ с пояснениями

Статическая диспетчеризация — это механизм выбора вызываемой функции или метода на этапе компиляции. Компилятор определяет, какую именно реализацию вызвать, исходя из типа переменной или контекста вызова. Это обеспечивает более быструю работу, так как вызов не требует дополнительного поиска во время выполнения.

Динамическая диспетчеризация происходит во время выполнения программы. Здесь выбор конкретного метода зависит от реального типа объекта, на который ссылается переменная, и обычно реализуется через таблицы виртуальных функций (vtable). Это позволяет использовать полиморфизм и переопределение методов.

Пример в Swift:

class Animal {
    func sound() {
        print("Some sound")
    }
}

class Dog: Animal {
    override func sound() {
        print("Bark")
    }
}

let animal: Animal = Dog()
animal.sound() // вызов динамический, выведет "Bark"

Здесь вызов метода sound() — динамическая диспетчеризация, так как реальный тип объекта Dog определяется во время выполнения.

Если бы метод был статическим (например, статическая функция), то вызов был бы определён на этапе компиляции — статическая диспетчеризация.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

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

Подробнее