În limbile compilate, diferența este strictă.
Java:
//early binding:
public create_a_foo(*args) {
return new Foo(args)
}
my_foo = create_a_foo();
//late binding:
public create_something(Class klass, *args) {
klass.new_instance(args)
}
my_foo = create_something(Foo);
In the first example, the compiler can do all sorts of neat stuff at compile time. In the second, you just have to hope that whoever uses the method does so responsibly. (Of course, newer JVMs support the Class<? extends Foo> klass
structure, which can greatly reduce this risk.)
Un alt avantaj este că IDE-urile se pot conecta la definiția clasei, deoarece sunt declarate chiar acolo în metodă. Apelul de a crea_something (Foo) ar putea fi foarte departe de definiția metodei și dacă vă uitați la definiția metodei, ar fi bine să vedeți implementarea.
Avantajul major al legării târzii este că facilitează inversarea controlului, precum și anumite alte utilizări ale polimorfismului și tipărirea rațelor (dacă limba dvs. susține astfel de lucruri).