Überladen in Java und multiple dispatch

Ich habe eine collection (oder eine Liste oder array-Liste), in der ich wollen, setzen Sie die beiden String-Werte und double-Werte. Ich beschloss, es eine Sammlung von Objekten und Verwendung von überladen ond Polymorphismus, aber ich habe etwas falsch gemacht.

Ich führen einen kleinen test:

public class OOP {
    void prova(Object o){
        System.out.println("object");
    }

    void prova(Integer i){
    System.out.println("integer");
    }

    void prova(String s){
        System.out.println("string");
    }

    void test(){
        Object o = new String("  ");
        this.prova(o); //Prints 'object'!!! Why?!?!?
    }

    public static void main(String[] args) {
        OOP oop = new OOP();
        oop.test(); //Prints 'object'!!! Why?!?!?
    }
}

Im test scheint das argument Typ ist beschlossen, die zur Kompilierzeit und nicht zur Laufzeit. Warum ist das so?

Diese Frage ist in Bezug auf:

Polymorphismus vs Überschreiben vs. Überladen

Versuchen Sie zu beschreiben, Polymorphismus so einfach, wie Sie können

EDIT:

Ok, die Methode, die aufgerufen werden, ist beschlossen, zur compile-Zeit. Gibt es einen workaround um zu vermeiden, mit der instanceof Betreiber?

  • Denn das ist, wie Java das überladen funktioniert.
  • Aber das Objekt ist ein String zur Laufzeit, und es ist eine definierte Methode für strings. Was mache ich falsch?
  • Sie sind unter der Annahme, dass die Wahl der überladung zum Aufruf zur Laufzeit. Es ist nicht; es ist beschlossen, zur compile-Zeit, auf der Grundlage der statische Typ des Arguments.
  • Überschreiben ist dynamisch, aber überladen ist statisch. Es ist design-Wahl.
  • Danke. Wie kann ich tun, um zur Laufzeit entscheiden, welche Methode es aufgerufen?
  • Verwenden Polymorphismus 🙂 oder das Besucher-Muster für multiple dispatch.

InformationsquelleAutor | 2012-03-18
Schreibe einen Kommentar