Найти тему
DEBAGanov

Java 347. Что такое статическая и динамическая привязка в Java?

Статическая и динамическая привязка - это два способа связывания методов с вызывающим кодом в Java.

Статическая привязка (static binding) происходит во время компиляции. Компилятор определяет, какой метод будет вызван на основе типа ссылки на объект, которая используется для вызова метода. Если тип ссылки на объект является классом или интерфейсом, то компилятор выберет метод этого класса или интерфейса. Если тип ссылки на объект является суперклассом, то компилятор выберет метод из этого суперкласса. Статическая привязка применяется к статическим методам и конечным (final) методам.

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

Вот пример динамической привязки:

class Parent {
public void method() {
System.out.println("Parent's method");
}
}

class Child extends Parent {
@Override public void method() {
System.out.println("Child's method");
}
}

public class Main {
public static void main(String[] args) {
Parent obj = new Child();
obj.method(); // Выведет "Child's method" }
}

Здесь мы создали экземпляр класса Child и присвоили его переменной типа Parent. При вызове метода method() на объекте obj, который ссылается на экземпляр Child, будет вызвана переопределенная версия метода.

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

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov