Введение в статическое и динамическое связывание

Это два типа привязки. Привязка относится к ассоциации вызова метода с телом метода. В статическом связывании все присваивание и объявление происходит во время компиляции. У них много плюсов и минусов друг над другом. По производительности статическое связывание лучше, чем динамическое связывание методов и переменных. Статическое связывание также известно как раннее связывание. Как все мы знаем, методы Binding, такие как static, private & final, происходят во время компиляции, в то время как в компиляторе динамического связывания не решается, какой метод будет вызван.
Ниже приведенный пример является лучшим примером для понимания

Пример № 1

public class StaticBindingExample (
public static void main(String args()) (
Vehicle veh = new MotorBike();
veh.start();
)
)
class Vehicle (
static void start() (
System.out.println("vehicle will start now..");
)
)
class MotorBike extends Vehicle (
static void start() (
System.out.println("Bike will start now..");
)
)

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

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

Пример № 2

public class StaticBindingExample (
public static void main(String args()) (
Vehicle veh = new MotorBike();
veh.start();
)
)
class Vehicle (
void start() (
System.out.println("vehicle will start now..");
)
)
class MotorBike extends Vehicle (
void start() (
System.out.println("Bike will start now..");
)
)

В этом примере static отсутствует в методе start метода метода parent & child, поэтому метод с тем же именем переопределит метод родительского класса. Это происходит из-за этого.

На приведенном выше снимке экрана показан вывод программы.

Почему статическое и динамическое связывание?

  1. Для программирования необходимо обрабатывать различные ситуации с использованием статического и динамического связывания.
  2. Привязка во время компиляции известна как Раннее связывание, т.е. это означает, что когда нужно объявить вещи во время компиляции (в самом начале) выполнения программы. В динамическом связывании связывание происходит во время выполнения, также известное как Позднее связывание.
  3. Метод и переменные, определенные как статические, окончательные и закрытые, относятся к статическому связыванию, в то время как виртуальные методы, привязка которых выполняется во время выполнения, известны как динамическое связывание.
  4. Перегрузка метода / Перегрузка оператора использует статическое связывание, поэтому это один из лучших примеров, а переопределение использует динамическое, поэтому оно известно как лучший пример динамического связывания.
  5. При этом реальный объект никогда не используется, тогда как реальный объект используется в динамическом связывании.

Примеры

В приведенном ниже примере мы можем видеть, как происходит статическое связывание

Пример № 1

// Реализация родительского класса

class Colony(
//Static method to start the electricity of the Colony
public static void start electricity()(
//printing the message here
System.out.println("Colony Electricity is On.");
)
)
//Child class implementation
class Building extends Colony(
//Static method to start the electricity of Building
public static void startElectricity()(
//printing the message here
System.out.println("Building Electricity is On.");
)
)
public class StaticBindingExample (
public static void main(String args()) (
//Creating object of the parent class type
Colony col = new Colony();
col.startElectricity();
//Creating object of the child class type
Colony col2 = new Building();
col2.startElectricity();
)
)

В приведенной выше программе col - это ссылочная переменная типа Colony, указывающая на объект класса Colony. col2 также является ссылочной переменной типа Colony, но указывает на объект класса Building. Когда происходит компиляция, в то время как компилятор привязки никогда не проверяет тип объекта, он просто проверяет тип ссылочной переменной.

В приведенной выше программе, такой как col .startElectricity (), компилятор проверяет, существует ли определение метода начального электричества () в классе Colony или нет, потому что col - это тип класса Colony. Аналогично для вызова метода col2.startElectricity (), он проверяет, присутствует ли метод start Electric () в классе Colony или нет, потому что col2 также является типом класса Colony. Он не проверяет, на какой объект col, col2 указывает. этот тип связывания известен как статическое связывание.

Выход:

Приведенный выше вывод программы показывает, как статические элементы используются для предотвращения переопределения.

Пример № 2

В приведенном ниже примере мы можем видеть, как происходит динамическое связывание во время выполнения

// Реализация родительского класса

class Colony(
//method to start the electricity of the Colony
void startElectricity()(
//printing the message here
System.out.println("Colony Electricity is On.");
)
)
//Child class implementation
class Building extends Colony(
//method to start the electricity of Building
void startElectricity()(
//printing the message here
System.out.println("Building Electricity is On.");
)
)
public class StaticBindingExample (
public static void main(String args()) (
//Creating object of the parent class type
Colony col = new Colony();
col.startElectricity();
//Creating object of the child class type
Colony col2 = new Building();
col2.startElectricity();
)
)

В приведенной выше программе все то же самое, что и в статической программе-примере, но в этом примере член метода «static» удален. Во время этого будет вызван метод основного объекта, на который указывает col.startElectricity (). При вызове col2.startElectricity () будет вызван метод основного объекта, на который указывает col2. Этот тип привязки известен как динамическое связывание.

Выход:

преимущество

  1. Выполнение статического связывания более эффективно и быстрее, чем динамическое. Этот компилятор связывания знает, что эти типы методов не могут быть переопределены.
  2. В статической привязке тип используется, а динамическая привязка использует объекты для привязок.
  3. Одним из основных преимуществ динамического связывания является гибкость, благодаря гибкости, которую одна функция может обрабатывать различные типы объектов во время выполнения.
  4. В статическом связывании: вся информация, необходимая до времени компиляции, в то время как в динамическом связывании никакая информация не остается доступной до времени выполнения.
  5. Статическое связывание может выполняться с использованием обычных функций, тогда как динамическое связывание может осуществляться с помощью виртуальных функций.

Вывод

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

Рекомендуемые статьи

Это руководство по статическому и динамическому связыванию. Здесь мы обсуждаем введение, использование и преимущества. Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше -

  1. Типы веб-хостинга
  2. Перегрузка и переопределение в Java
  3. AngularJS Директивы
  4. Полиморфизм в Яве
  5. Статический метод JavaScript | Рабочая | Примеры