La surcharge en Java et plusieurs d'expédition

J'ai une collection (de liste ou de tableau ou de liste) dans lequel je veux mettre les deux valeurs de Chaîne et les valeurs doubles. J'ai décidé de faire une collection d'objets et à l'aide de la surcharge ond polymorphisme, mais j'ai fait quelque chose de mal.

Je lance un petit 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?!?!?
    }
}

Dans le test semble que le type d'argument est décidé au moment de la compilation et non à l'exécution. Pourquoi est-ce?

Cette question est liée à:

Polymorphisme vs Primordial vs Surcharge

Essayez de décrire le polymorphisme aussi facile que vous le pouvez

EDIT:

Ok la méthode à appeler est décidé au moment de la compilation. Est-il une solution pour éviter d'utiliser le instanceof opérateur?

  • Parce que c'est la façon dont Java surcharge de travaux.
  • Mais cet objet est une Chaîne de caractères au moment de l'exécution, et il y a une méthode définie pour les chaînes. Ce que je fais mal?
  • Vous êtes en supposant que le choix de la surcharge d'appel est fait au moment de l'exécution. Il n'est pas; c'est décidé au moment de la compilation, basé sur le type statique de l'argument.
  • Primordial est dynamique, mais la surcharge est statique. C'est un choix de conception.
  • Je vous remercie. Comment puis-je faire pour décider au moment de l'exécution de la méthode qui appelle t-il?
  • Utiliser le polymorphisme 🙂 ou des habitudes des visiteurs pour la répartition multiple.

InformationsquelleAutor | 2012-03-18