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

Kak Ispol Zovat Dinamiceskuu Privazku V Java



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

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

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

Динамическое связывание обеспечивает слабую связь между объектами. Это помогает легко расширять функциональность, добавляя новые подклассы, которые переопределяют методы без изменения существующего кода. Динамическое связывание широко используется для диспетчеризации во время выполнения, обработки событий или систем подключаемых модулей.







Давайте рассмотрим пару примеров для подробного объяснения:



Пример 1. Реализация динамического связывания



Используя динамическую привязку, программисты могут позволить пользователям настраивать и переопределять поведение по умолчанию для создания настраиваемых приложений. Для практической реализации рассмотрим пример:





импортировать java.util.Arrays;
импортировать java.util.HashSet;
импортировать java.util.List;
импортировать java.util.Set;

открытый класс DynBind {
публичная статическая пустота главная ( Нить [ ] аргументы ) {
Игровой gameType1 = новый крикет ( ) ;
Игровой gameType2 = новый CallofDuty ( ) ;
gameType1.gameType ( ) ;
gameType2.gameType ( ) ;
}
}
класс игр {
public void тип игры ( ) {
System.out.println ( «Физические или виртуальные игры» ) ;
}
}
класс Cricket расширяет возможности игр {
@ Переопределить
public void тип игры ( ) {
System.out.println ( «Крикет — физическая игра» ) ;
}
}
класс CallofDuty расширяет возможности игр {
@ Переопределить
public void тип игры ( ) {
System.out.println ( «CallofDuty — это виртуальная игра» ) ;
}
}

Объяснение приведенного выше кода:



  • Во-первых, класс « Динбинд ', и два объекта типа ' Игры » объявляются.
  • Далее эти объекты инициализируются новыми « Крикет ' и ' Чувство долга ”, эта инициализация демонстрирует динамическую привязку. Тип ссылки ' Игры », но фактические типы объектов « Крикет ' и ' Чувство долга ', соответственно.
  • Теперь эти объекты используются для вызова « тип игры() », переопределяя функцию в дочерних классах.
  • Затем родитель» Игры объявляется класс, который создает и инициализирует « тип игры() », которая печатает фиктивное текстовое сообщение.
  • Далее создаются два дочерних класса с именем « Крикет ' и ' Чувство долга ». Эти классы наследуются от родительского ' Игры ' сорт.
  • После этого « @Override » аннотация используется для переопределения родителя « Игры ” методы класса с именем “ тип игры() ».
  • В конце концов, в обоих переопределенных методах дочернего класса отображается другое фиктивное сообщение.

После окончания фазы исполнения:

Вывод показывает, что фиктивные сообщения дочерних классов отображаются на консоли с использованием динамической привязки.

Пример 2: Реализация многоуровневого наследования

Динамическое связывание также может быть реализовано для создания многоуровневого наследования. Два блока кода одной и той же программы, как показано ниже:

класс игр {
public void тип игры ( ) {
System.out.println ( «Физические или виртуальные игры» ) ;
}
}
класс Cricket расширяет возможности игр {
@ Переопределить
public void тип игры ( ) {
System.out.println ( «Крикет — физическая игра» ) ;
}
public void playFormat ( ) {
System.out.println ( «У крикета разные форматы игры» ) ;
}
}
класс CallofDuty расширяет возможности игр {
@ Переопределить
public void тип игры ( ) {
System.out.println ( «CallofDuty — это виртуальная игра» ) ;
}
публичная недействительная играMode ( ) {
System.out.println ( «CallofDuty имеет несколько игровых режимов» ) ;
}
}
класс CricketGame расширяет крикет {
публичная недействительная играMode ( ) {
System.out.println ( «Крикет имеет режим одиночной игры» ) ;
}
}
класс CallofDutyGame расширяет CallofDuty {
}

Объяснение приведенного выше кода:

  • Во-первых, родитель» Игры », и он включает в себя « тип игры() », которая содержит фиктивное сообщение.
  • Затем два дочерних класса с именем « Крикет ' и ' Чувство долга », обе переопределяют функцию родительского класса с именем « тип игры() ».
  • Эти классы содержат одну дополнительную функцию с именем « формат воспроизведения() ' и ' игровой режим() функции соответственно.
  • Затем создайте многоуровневый дочерний элемент с именем « КрикетИгра 'расширяется ребенком' Крикет ' сорт. Он содержит « игровой режим() 'функция, которая переопределяется своим родителем' Крикет ' сорт.
  • После этого « CallofDutyИгра » создается как дочерний для « Чувство долга ' сорт. Он создает многоуровневое наследование и включает функциональные возможности динамического связывания.

Теперь вставьте « основной() метод:

открытый класс DynBind {
публичная статическая пустота главная ( Нить [ ] аргументы ) {
CallofDutyИгра кодг = новая игра CallofDuty ( ) ;
codg.gameType ( ) ;
codg.gameMode ( ) ;

КрикетИгра криг = новая игра в крикет ( ) ;
crig.gameType ( ) ;
crig.playingFormat ( ) ;
crig.gameMode ( ) ;
}
}

Объяснение приведенного выше кода:

  • Во-первых, объект « CallofDutyИгра », который вызывает функции своих родительских классов.
  • Таким же образом « КрикетИгра », который вызывает функцию родительского класса, доступную на многоуровневом уровне иерархии.

После окончания фазы исполнения:

Вывод показывает, что многоуровневое наследование создается с использованием динамического связывания в Java.

Заключение

В Java « динамическая привязка предлагает такие преимущества, как полиморфизм, повторное использование кода, гибкость и расширяемость. Он реализуется с помощью следующих правил наследования, переопределения методов и повышения класса. Динамическое связывание также включает функции времени выполнения и улучшает гибкое и полиморфное поведение в концепции ООП. Это все, что касается использования и реализации динамического связывания в Java.