Динамическая привязка — это ключевое свойство ООП на Java, которое позволяет вызывать методы во время выполнения программы. Динамическая привязка используется для вызова переопределенных методов во время выполнения, и она не может быть использована вместе со статическими, финальными или приватными методами.
Суть динамической привязки заключается в том, что выбор конкретной реализации метода, который был указан в классе-родителе, происходит на момент выполнения программы, а не на момент компиляции.
Рассмотрим следующий пример кода:
abstract class Animal {
abstract void sound();
}
class Dog extends Animal {
void sound() {
System.out.println("Bark");
}
}
class Cat extends Animal {
void sound() {
System.out.println("Meow");
}
}
public class Main {
public static void main(String args[]) {
Animal myPet = new Dog();
myPet.sound(); // prints Bark
myPet = new Cat();
myPet.sound(); // prints Meow
}
}
В этом примере у нас есть абстрактный класс Animal
и два его подкласса: Dog
и Cat
. В классе Main
мы используем ссылку на Animal
для создания объектов Dog
и Cat
. Выбор метода sound()
, который должен быть вызван, делается на основе типа конкретного объекта, ссылающегося на myPet
во время выполнения программы.
Динамическая привязка является важной особенностью полиморфизма в Java. Без динамической привязки Java не смогла бы на 100% реализовать принцип "один интерфейс, множество методов". Получение доступа к правильной версии метода для конкретного типа объекта во время выполнения делает код более гибким и расширяемым. Ведь в каждый момент времени код зависит от состояния программы.