squalyl^2 :
String hérite de Object, donc l'Object créé est initialisé avec l'héritage du new String() vu comme un Object
Mais il est déclaré en tant qu' Object. Donc il en ressort un Object, qui appelle la méthode demandant un Object.
normal nan?
Une String est un Object. C'est absolument vrai et tout à fait normal qu'il puisse être traité de la même manière que n'importe quel autre Object (c'est ça le polymorphisme, entre autres). Cependant, il reste une String, et si une méthode existe en deux versions, une qui peut traiter des String et une qui peut traiter des Objects, je trouverait plus normal que celle qui peut traiter des String soit appelée (car la nature de l'objet qui est passé en paramètre est une String).
Cependant, en Moka (et en Java on dirait), la signature de la méthode est générée à la compilation, donc :
-pour t.f(new String());-
nom = f
arguments = String
-pour t.f(o);-
nom = f
arguments = Object
C'est pas dramatique, ça n'empêche pas d'exploiter le polymorphisme, comme je le disais avant même de savoir que Java avait le même comportement que Moka ...