Sobes.tech
Назад к вопросам
Junior — Middle
67

Какие отличия существуют между статической и динамической привязкой методов в языке Java?

Ответ от нейросети

sobes.tech AI

В Java различают статическую (static) и динамическую (dynamic) привязку методов по времени определения, какой именно метод будет вызван:

  • Статическая привязка происходит во время компиляции. К ней относятся вызовы статических методов, приватных методов и методов, вызов которых происходит через ссылку на конкретный тип (например, вызов методов final или private). Компилятор точно знает, какой метод будет вызван.

  • Динамическая привязка происходит во время выполнения (runtime). Она применяется для виртуальных методов (обычно это нестатические, не final и не private методы). JVM определяет, какой именно метод переопределён в классе объекта, на который указывает ссылка, и вызывает именно его.

Пример:

class Animal {
    void sound() { System.out.println("Animal sound"); }
    static void staticSound() { System.out.println("Static animal sound"); }
}

class Dog extends Animal {
    @Override
    void sound() { System.out.println("Bark"); }
    static void staticSound() { System.out.println("Static bark"); }
}

Animal a = new Dog();
a.sound();        // Вызовется Dog.sound() — динамическая привязка
Animal.staticSound(); // Вызовется Animal.staticSound() — статическая привязка

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