Вот несколько важных различий между статическим и динамическим связыванием:
- Статическое связывание в Java возникает во время компиляции, тогда как динамическое связывание происходит во время выполнения.
private
,final
иstatic
методы и переменные используют статическое связывание и связаны с компилятором, тогда как виртуальные методы связаны во время выполнения на основе объекта времени выполнения.- Статическая привязка использует
Type
(class
в Java) информацию для привязки, тогда как динамическое связывание использует объект для разрешения привязки.- Перегруженные методы связаны с использованием статического связывания, тогда как переопределенные методы связаны с использованием динамического связывания во время выполнения.
Вот пример, который поможет вам понять как статическую, так и динамическую привязку в Java.
Пример статической привязки в Java
public class StaticBindingTest { public static void main(String args[]) { Collection c = new HashSet(); StaticBindingTest et = new StaticBindingTest(); et.sort(c); } //overloaded method takes Collection argument public Collection sort(Collection c) { System.out.println("Inside Collection sort method"); return c; } //another overloaded method which takes HashSet argument which is sub class public Collection sort(HashSet hs) { System.out.println("Inside HashSet sort method"); return hs; } }
Вывод: метод сортировки внутри коллекции
Пример динамического связывания в Java
public class DynamicBindingTest { public static void main(String args[]) { Vehicle vehicle = new Car(); //here Type is vehicle but object will be Car vehicle.start(); //Car's start called because start() is overridden method } } class Vehicle { public void start() { System.out.println("Inside start method of Vehicle"); } } class Car extends Vehicle { @Override public void start() { System.out.println("Inside start method of Car"); } }
Выход: метод внутреннего запуска автомобиля
blockquote>