Me puse a pensar y recordé a la clase Date, se encuentra en dos lugares, pero a pesar de que tienen el mismo nombre NO son lo mismo.
java.util.Date;
y
java.sql.Date;
http://www.thunderguy.com/semicolon/2003/08/14/java-sql-date-is-not-a-real-date/
Claro, cuando digo que tienen el mismo nombre, no tomo en cuenta el espacio de nombres, así que, propiamente dicho, no tienen el mismo nombre.
Creo que, al final, voy a tener que ser yo el que tiene que revisar la teoría de orientación a objetos :-)
En cuanto al tema de las variables, sí, pueden tener el mismo nombre, pero cuando quieras usar dichas clases en el mismo lugar, tendrías que usar el nombre completo de la clase, con espacio de nombres y todo. Revisa el caso de "Date".
En una clase no puedes hacer:
import java.util.Date;
import java.sql.Date;
Te marcará error si tratas de hacer eso. Para usar los métodos de una u otra clase, tendrías que hacerlo colocando el nombre completo y luego el método.
Una cosa curiosa es que varios de los métodos de esas clases ya están "deprecated". Me pregunto si habrá sido un error de diseño.
Sé que he desvariado un poco, pero espero haberte ayudado. Nos vemos.