Какие отличия существуют между статической и динамической привязкой методов в языке 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() — статическая привязка
Таким образом, динамическая привязка обеспечивает полиморфизм, позволяя вызывать переопределённые методы в наследниках, а статическая — фиксирует вызов на этапе компиляции.