Разрешение конфликта пакетов

Предположим, у нас есть пакет с именем com.example1, содержащий класс Hello (вместе с другими классами).

Затем у нас есть еще один пакет com.example2, также содержащий класс Hello (очевидно, с другим поведением).

Теперь предположим, что нам нужны все классы в com.example1 и класс Hello в com.example2.

import com.example1.*;
import com.example2.Hello;

Какой из них вызывается в этом случае?

Hello hello = new Hello();

Или это дает ошибку компиляции?

Это просто теоретический вопрос из любопытства.

Поскольку пакеты были созданы, чтобы избежать конфликта имен, что произойдет, если два пакета содержат два класса с одинаковыми именами?


person Federico klez Culloca    schedule 17.08.2010    source источник


Ответы (3)


Это даст ошибку компиляции. Вы должны явно назвать класс - com.example2.Hello hello = new com.example2.Hello();

person Petar Minchev    schedule 17.08.2010
comment
@klez Да, но вы можете оставить импорт для ясности - просто чтобы было видно, откуда импортируются классы в верхней части файла java. - person Petar Minchev; 17.08.2010

Вместо того, чтобы оставлять это на волю случая, было бы лучше быть явным в своих заявлениях. Это ошибка компиляции.

Подобное столкновение часто происходит с java.util.List и java.awt.List. Если вы ясны, путаницы не будет.

person Noel M    schedule 17.08.2010
comment
Столкновение java.awt.List расстроило меня до такой степени, что я удалил его из моей локальной разработки JRE. - person mdma; 17.08.2010

Это не приведет к ошибке компилятора, как указано другими пользователями. Он будет использовать com.example2.Hello. Это связано с тем, что явный импорт (com.example2.Hello) всегда будет иметь приоритет над импортом * (com.example1.*).

person Dheeru Mundluru    schedule 07.04.2015