Statisches Binden bezeichnet den Vorgang, einem Objekt zur Übersetzungszeit den Programmcode fest zuzuordnen; dynamisches Binden bezeichnet den Vorgang, einem Objekt zur Laufzeit den Programmcode zuzuordnen.
Bei der Programmiersprache Java werden alle Instanzmethoden dynamisch gebunden. Der Compiler prüft lediglich, ob die entsprechende Methode vorhanden ist, aber erst zur Laufzeit wird festgestellt, von welchem Typ das Objekt ist und die entsprechende Methode wird ausgewählt. So kann eine Referenz vom Typ Person sowohl auf ein Person Objekt verweisen, als auch auf ein Student Objekt. Erst zur Laufzeit wird festgestellt, um welches Objekt es sich handelt und die entsprechende Methode wird ausgewählt.
Alles andere (Klassenmethoden, Klassenvariablen, Instanzvariablen) wird statisch gebunden, also bereits zur Compilezeit ausgewählt und fest verdrahtet. Der Compiler wählt also die Klassenmethode oder Variable aus, die dem Typ der Referenz entspricht.
Folgende Fälle können z.B. auftreten:
Person p = new Person ("Uwe","Meier",24,12,1971); Student s = new Student("Eva","Kahn",15,9,1972,"BWL",1998);Wird übersetzt und zwei Instanzen werden angelegt.
Die folgende Grafik verdeutlicht das Zusammenspiel zwischen den Klassen Person und Student und ihren Instanzen. Auf dem Laufzeitkeller führt von der Variable s ein Verweis auf die Speicherfläche, welche eine Instanz vom Typ Student aufnimmt. Da einige Bestandteile von Student (nämlich vorname, nachname, geb_datum und fach) selbst wieder Objekte sind, führen dorthin weitere Verweise; die Instanzvariablen matr_nr und jsb werden hingegen explizit gespeichert. Ein weiterer Verweis (gezeichnet von links nach rechts) führt zu den Klassenvariablen und Klassenmethoden; von dort sind die Oberklassen erreichbar, von denen geerbt wurde.