Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Дублирование имен классов |
Автор: Bikutoru 27.7.2005, 09:23 | ||
Здраствуйте. У меня возник один вопрос. В 3ей главе Эккеля приведён следующий пример:
В то же время в каждую программу неявно импортируется java.lang, в состав которого тоже входит класс Number. При этом никакой ошибки не происходит, хотя по логике у нас есть два различных класса с одинаковым названием... Если я явно импортирую java.lang.*, то опять же нет никакой ошибки, она возникает, только если я явно импортирую java.lang.Number. А теперь, собственно, мой вопрос ![]() |
Автор: batigoal 27.7.2005, 09:45 |
Скорее всего, класс из этого же пакета "перекрывает" класс из других пакетов. Можно поэкспериментировать - сделать свой пакет, перенести в него свой Number и попробовать импортировать. Добавлено @ 09:51 А может, это особенность пакета java.lang?.. |
Автор: LSD 27.7.2005, 09:53 | ||
Явный импорт класса перекрывает импорт пакета:
Будет использован java.util.Date. А вообще это все проблемы времени компиляции, внутри байткода все имена классов хранятся полностью (с именем пакета). |
Автор: jer1 27.7.2005, 13:35 | ||||||
http://java.sun.com/docs/books/jls/third_edition/html/packages.html#7.5.2 или по-русски http://www.uni-vologda.ac.ru/java/jls/7-doc.htm как я понял при одиночном импорте (7.5.1 Single-Type-Import Declaration) мы сразу связываем тип и имя в соответствующем модуле компиляции (в дальнейшем в этом модуле компиляции другой тип с таким же именем мы не сможем объявить из-за конфликта имён)
импорт по шаблону (7.5.2 Type-Import-on-Demand Declaration) даёт возможность получать доступ к типам находящимся в заданом пакете
Причём в дальнейшем объясняется как разрешаются спорные ситуации в отношении имен типов: опять же как я понял, имя типа получаемое из конструкции вида PackageOrTypeName . * используется только если нет более частного случая: одиночного импорта импортирующего тип с тем же именем, наличие класса или интерфейса с тем же именем в текущем модуле компиляции
|
Автор: Bikutoru 30.7.2005, 10:23 |
Всем спасибо за ответы. Почитал их, спецификацию, поэкспериментировал, вроде бы с этим разобрался (плюю через левое плечо, чтобы не сглазить) |