今更ですが、メモ程度にタイトルの通りJavaで1つのクラスに同名のクラスをインポートする場合にどうするかを紹介したいと思います。
同名のクラスをインポートするとどうなるか。
同名のクラスとしてよく紹介される、「java.util.Date」と「java.sql.Date」で試してみます。
以下のように、「java.util.*」、「java.sql.*」という形でimportして、Dateクラスを使うと「型 Date はあいまいです」というエラーメッセージが表示されます。
それは、そのはずで「java.util.Date」と「java.sql.Date」どちらのDateクラスかをコンパイラが判別できないからですよね。
「java.util.Date」を明示的にimportして、「java.sql.*」という形でimportするとどうなるか。
「java.util.Date」を明示的にimportして、「java.sql.*」という形でimportすると特にエラーは発生しなくなりました。
明示的に「java.util.Date」というimportをすると、ソース上のDateクラスは明示的に指定したクラスを指すことになるようです。
また、「java.sql.*」は一度も使われていないという判定になり、警告メッセージが付与されています。
「java.util.Date」、「java.sql.Date」どちらもソースで使いたい場合はどうするか。
「java.util.Date」、「java.sql.Date」のどちらも明示的にimportすると以下のようにエラーになります。
エラーメッセージは、「インポート java.sql.Date は、別の import 文と一致しません」という文言です。これはおそらく、「インポート java.sql.Date は、別の import 文と一致します」だと思うのですが、とにかく同じクラス名の複数のimport文は記載できない模様です。
なので、どちらかはimportを諦めてクラスを使う場所でパッケージも指定する形(完全修飾クラス名)で定義すれば良さそうです。
ここでは、「java.util.Date」はimportをしてるので使う側では単純にDateと定義し、「java.sql.Date」は完全修飾クラス名で定義しています。