Импорт подстановочных знаков в Java работает только на том уровне, на котором реализуются классы.
То есть, если у вас есть классы A
, B
и C
с полностью квалифицированными именами:
com.foo.bar.A
;
com.foo.bar.B
;
com.foo.C
;
затем импортировать com.foo.bar.*
позволит получить доступ к A
и B
без дальнейших проволочек; но C
НЕ будет доступен.
В том же ключе, импорт com.foo.*
будет легко иметь C
доступны, но не A
и B
.
Сейчас:
Я подумал, что если вы включили класс, как в последние два примера, что вы эффективно импортирован этот класс и унаследовал все его подклассы.
Это не так. Даже если B
«наследует» A
, если вы решите использовать полный импорт com.foo.bar.A
, он НЕ будет автоматически импортировать com.foo.bar.B
. Вам придется импортировать B
отдельно. Что имеет смысл: ничто не заставляет реализацию интерфейса или абстрактного класса быть в том же пакете, что и его базовый интерфейс/базовый класс, для одного; и в том же проекте у вас могут быть два класса с именем B
, в разных пакетах: что должен делать компилятор?
Теперь, в соответствии с соглашениями о стиле кодирования, которые вы либо сами придумываете, либо должны подчиняться в своей рабочей среде, такие подстановочные импорты могут быть просто и просто запрещены, и вам придется импортировать и B
отдельно. Что касается статического импорта, у них есть и другие проблемы ...
И, наконец, обратите внимание, что по умолчанию вы можете использовать все java.lang.*
, не декларируя импорт.
Использование 'import java.awt. *' Будет импортировать только классы в пакет 'java.awt' (если есть). Обратите внимание, что '*' wildcard не является рекурсивным для пакетов. –
Ваши последние два образца не включают классы, они * импортируют пакеты. * – EJP