Ключевая разница - статическая привязка и динамическая привязка
Языки программирования, такие как Java и C, поддерживают объектно-ориентированное программирование (ООП). Это позволяет создавать программное обеспечение с использованием объектов. В программной системе или программе существует множество объектов. Эти объекты имеют атрибуты и методы. Атрибуты описывают характеристики. Методы описывают действия, которые может выполнять объект. Данные передаются через объекты с помощью методов. Необходимые значения отправляются через вызовы методов с параметрами. Фактическая реализация метода находится в определении метода. Существует связь между вызовом метода и определением метода. Это известно как связывание. Существует два типа креплений. Это статическая привязка и динамическая привязка. Основное различие между статической привязкой и динамической привязкой заключается в том, что при статической привязке привязка разрешается во время компиляции, а при динамической привязке - во время выполнения, то есть во время фактического выполнения. В этой статье обсуждается разница между этими двумя механизмами связывания.
Что такое статическая привязка?
Binding - это связь между вызовом метода и определением метода.
Рисунок 01: Статическая и динамическая привязка
Обратитесь к приведенной ниже программе, написанной на Java.
публичный класс A{
public void method1(){
System.out.println(“Method1”);
}
public void method2(){
System.out.println(“Method2”);
}
public static void main(String args){
A obj=new A();
obj.method1();
obj.method2();
}
}
По приведенной выше программе создается объект типа A. Затем вызываются метод1 и метод2. Определение того, какой метод должен вызывать выполнение, называется привязкой. Оператор obj.method1() вызовет метод1(), а obj.method2() вызовет метод2(). Эта ссылка является обязательной.
В статическом связывании связывание разрешается компилятором во время компиляции. Он также известен как раннее связывание. Связывание происходит до фактического запуска программы. Статическая привязка возникает при перегрузке метода. Обратитесь к приведенной ниже программе, написанной на Java.
public void Расчет{
public void sum(int x, int y){
System.out.println("Сумма равна ", x+y);
}
public void sum(double x, double y){
System.out.println("Сумма равна ", x+y);
}
public static void main(String args){
Расчет cal=new Calculation();
cal.sum(2, 3);
cal.sum(5.1, 6.4);
}
}
Согласно приведенной выше программе, при передаче двух целых чисел будет вызван метод с двумя целыми числами. При передаче двух значений типа double будет вызван метод, соответствующий двум значениям типа double. Этот процесс связывания происходит во время компиляции. Компилятор знает, что он должен вызвать метод суммы с двумя целочисленными значениями для cal.sum(2, 3). Для cal(5.1, 6.4) вызовет метод суммы с двумя двойными значениями. Вся необходимая информация известна до запуска, что повышает эффективность и скорость выполнения программы.
Что такое динамическое связывание?
В динамическом связывании компилятор не разрешает связывание во время компиляции. Связывание происходит во время выполнения. Он также известен как позднее связывание. Динамическое связывание происходит при переопределении метода. Обратитесь к программе, написанной на Java.
публичный класс Shape(){
public void draw(){
System.out.println(“Нарисовать форму”);
}
}
общедоступный класс Circle() расширяет Shape{
public void draw(){
System.out.println(“Нарисовать круг”);
}
}
общедоступный класс Triangle() расширяет Shape{
public void draw(){
System.out.println(“Нарисовать треугольник”);
}
}
тест общедоступного класса{
public static void main(String args){
Форма s;
s=новая форма();
s.draw();
s=новый круг();
s.draw();
s=новый треугольник();
s.draw();
}
}
Согласно приведенной выше программе, класс Shape имеет метод draw(). Класс Circle и класс Triangle расширяют класс Shape. Класс Circle и класс Triangle могут наследовать атрибуты и методы класса Shape. Следовательно, класс Shape является суперклассом или родительским классом. Class Circle и Class Triangle являются подклассами или производными классами. Эти классы также имеют метод draw() со своими собственными реализациями. Поэтому метод draw() в суперклассе переопределяется.
В основном методе вызываются разные объекты. Существует ссылочная переменная типа Shape, которая является s. Затем s вызывает метод в соответствии с конкретным классом. Во время компиляции компилятор будет ссылаться только на метод рисования суперкласса. Когда начнется фактическое выполнение, это приведет к выполнению различных методов рисования. Во-первых, s будет указывать на объект типа Shape. Следовательно, он вызовет метод рисования в классе Shape. Затем s будет указывать на объект типа Circle и вызывать метод рисования класса Circle. Наконец, s будет ссылаться на объект типа Triangle и будет вызывать метод рисования в классе Triangle. Несмотря на то, что ссылочная переменная имеет тип Shape, привязка зависит от типа объекта. Эта концепция известна как динамическое связывание. Информация предоставляется во время выполнения, поэтому скорость выполнения ниже по сравнению со статической привязкой.
В чем сходство между статическим и динамическим связыванием?
Оба они связаны с полиморфизмом, который позволяет объекту вести себя несколькими способами
В чем разница между статическим связыванием и динамическим связыванием?
Статическое связывание и динамическое связывание |
|
Статическое связывание - это тип связывания, который собирает всю необходимую информацию для вызова функции во время компиляции. | Динамическое связывание - это тип связывания, который собирает всю необходимую информацию для вызова функции во время выполнения. |
Время привязки | |
Статическое связывание происходит во время компиляции. | Динамическое связывание происходит во время выполнения. |
Функциональность | |
Статическая привязка использует информацию о типе для привязки. | Динамическое связывание использует объекты для разрешения связывания. |
Фактический объект | |
Статическая привязка не использует реальный объект для привязки. | Динамическая привязка, используйте реальный объект для привязки. |
Синонимы | |
Статическое связывание также известно как раннее связывание. | Динамическое связывание также известно как позднее связывание. |
Исполнение | |
Скорость выполнения при статической привязке высокая. | Скорость выполнения при динамическом связывании низкая. |
Пример | |
Статическая привязка используется при перегрузке методов. | Динамическое связывание используется при переопределении метода. |
Резюме – статическое связывание и динамическое связывание
Существует связь между вызовом метода и определением метода. Это известно как связывание. Существует два типа привязки: статическая привязка и динамическая привязка. Разница между статической привязкой и динамической привязкой заключается в том, что в статической привязке привязка разрешается во время компиляции, а динамическая привязка разрешается во время выполнения, что является фактическим временем выполнения. Поскольку необходимая информация предоставляется до начала выполнения, статическая привязка выполняется быстрее, чем динамическая привязка.
Загрузить PDF-файл о статической и динамической привязке
Вы можете загрузить PDF-версию этой статьи и использовать ее в автономном режиме в соответствии с примечанием к цитированию. Загрузите PDF-версию здесь: Разница между статической и динамической привязкой