Smalltalk is almost exactly different. Smalltalk is a dynamically typed language -- variables are simply names, and do not have types associated with them. Values have types, but a variable may hold any type of value.
As is true of all dynamically typed languages, all variables are polymorphic. They can hold any type of type.
The legality of message cannot be checked at compile time, and so must always be checked at run time. It is possible to ask an object whether or not it understands a message, before trying the message and possibly getting a run-time ``does not understand'' error.
Because variables can hold any type, the revese polymorphism issue is not a problem in dynamically typed languages.