您的问题措辞不好,因为如果您愿意
import pkg.*,那么您当然可以从包
pkg.B和中导入类
pkg.C。也就是说,这样做非常好:
import pkg.*;import pkg.B.*;import pkg.C.*;
但是我假设您真正要问的是为什么,如果您
importpkg.*没有自动导入在的子包中声明的类型
pkg。要回答这个问题,最好转向Java语言规范:
程序包的分层命名结构旨在方便以常规方式组织相关程序包,但除禁止具有与顶级类型具有相同简单名称的子程序包的禁止包之外,其本身没有其他意义(第7.6节)在该包中声明。
例如,在一个名为的软件包
oliver和另一个名为的oliver.twist软件包之间,或在名为evelyn.wood和的软件包之间没有特殊的访问关系evelyn.waugh。也就是说,与其他任何程序包中的代码相比,名为程序包中的代码oliver.twist无法更好地访问在程序包中声明的类型oliver。
换句话说,当您
import pkg.*导入时,您将导入名称为的包中包含的编译单元定义的所有顶级 类型
pkg,但 不会
导入的任何子包
pkg(例如
pkg.B或
pkg.C)。



