Se mi permettete, volevo fare un po' di chiarezza sull'argomento.
Si parla di static (o "early") binding quando il compilatore è già in grado di determinare, prima della esecuzione del programma, quale è la variabile che verrà utilizzata o quale è la implementazione del metodo che verrà eseguita.
Si parla di dynamic (o "late") binding quando la scelta di quale implementazione del metodo eseguire non è conosciuta dal compilatore ma è determinata a runtime in base all'oggetto realmente istanziato.
In Java si ha uno static binding quando si invoca:
- un membro static (variabile o metodo)
- una variabile di istanza
- un metodo di istanza marcato private
- un metodo di istanza invocato tramite la keyword super
Invece si ha un dynamic binding quando si invoca:
- un metodo di istanza (purché non si cada nei due casi sopra indicati)