As I said in my equality
article, overloading in Java[1] is resolved by the
static type of the argument, not the run-time
type.
It's a generic problem of most compiled OO languages since
usually overloading resolution happens at compile-time and not at
runtime.
Now, that militates for the well known idiom :
Never overload a method with one that has the same number of parameters.
Actually, it should be enough to overload a method with one that accept
parameters that are not inheritance-related : String and
Number would be OK, but MyClass and
Object would not.