Dynamic binding

Schnabeltier

Mitglied
Hallo,

bis jetzt habe ich ja immer gedacht ich hätte das dynamische Binden verstanden, aber warum gibt der folgende code "throwable" aus, und nicht "exception" ?

Java:
public class LateBinding {

    public static void main(String[] args) {
        new LateBinding().go();
    }

    void go() {
        try {
            throw new Exception();
        } catch (Throwable t) {
            this.handle(t);
        }
    }

    void handle(Throwable t) {
        System.out.println("throwable");
    }

    void handle(Exception t) {
        System.out.println("excepiton");
    }
}

Gruss
Schnabel
 
S

SlaterB

Gast
weil der Compiler statisch bindet anhand des Typs,
nach dem Compilieren steht felsenfest fest, dass die Methode mit der Signatur von Zeile 15 aufgerufen wird,

durch dynamisches Binden kann zur Laufzeit höchstens noch eine andere Methode mit gleicher Signatur gewählt werden,
nämlich eine exakt überschreibende Methode einer Subklasse, Vererbung, Polymorphie usw.,
je nachdem von welchem Typ das aktuelle Objekt ist, nicht unbedingt LateBinding
 
Zuletzt bearbeitet von einem Moderator:

musiKk

Top Contributor
Dass es feststeht liegt übrigens an Zeile 10. Dort wird die Variable t deklariert und deren Typ ist ausschlaggebend.
 

musiKk

Top Contributor
Ja, das ist natürlich die simplere Erklärung. Meine ging eher dahin, dass eine Änderung wie [c]} catch (Exception e) {[/c] die Ausgabe "excepiton" (sic) und nicht "throwable" zur Folge hat.
 

Ähnliche Java Themen

Neue Themen


Oben