Ваш вопрос плохо если у вас import pkg.*
, вам, безусловно, разрешено затем импортировать классы из пакетов pkg.B
и pkg.C
. То есть, это прекрасно, чтобы сделать это:
import pkg.*;
import pkg.B.*;
import pkg.C.*;
Но я предполагаю, что вы на самом деле спрашиваете, почему, если вы import pkg.*
не автоматически импортировать типы, объявленные в подпакетах pkg
. Для того, чтобы ответить на этот вопрос, то лучше обратиться к Java Language Specification:
Иерархическая структура именования пакетов предназначена быть удобным для организации пакетов, связанных с обычным способом, но не имеет никакого значения в себе, кроме запрета против пакет, имеющий подпакет с таким же простым именем, как тип верхнего уровня (§7.6), объявленный в этом пакете.
Например, нет особых отношений доступа между пакетом с именем oliver
и другой пакетом с именем oliver.twist
, или между пакетами именем evelyn.wood
и evelyn.waugh
. То есть код в пакете с именем oliver.twist
не имеет лучшего доступа к типам, объявленным в пакете oliver
, чем код в любом другом пакете.
Другими словами, когда вы import pkg.*
, вы импортирования всех верхнего уровня типов, определенные в единицах компиляции, содержащихся в пакете с именем pkg
, но вы не импорта любого из суб- пакеты pkg
(например, pkg.B
или pkg.C
).
Ваш вопрос непонятен. На самом деле, между пакетами не существует очень большой зависимости, кажущаяся иерархия; тот факт, что у вас есть 'pkg' и' pkg.B', действительно не имеет отношения к ним каким-либо полезным способом. Какой класс вы пытаетесь импортировать, и что вы подразумеваете под «не разрешено»? – chrylis
Что не так с этим? –