Java中的“通配符”导入仅在实现类的最直接级别上起作用。
也就是说,如果你有课
A,
B并
C与完全合格的名称:
com.foo.bar.A
;com.foo.bar.B
;com.foo.C
;
然后导入
com.foo.bar.*将允许访问
A且
B无需再费力;但
C将不可用。
同样,导入
com.foo.*将很容易
C获得,而
Aand则没有
B。
现在:
我认为,如果像上两个示例中那样包含一个类,则可以有效地导入该类并继承其所有子类。
它不是。即使
B“继承”
A,如果您选择使用完全限定的导入
com.foo.bar.A,它也不会自动导入
com.foo.bar.B。您必须
B单独导入。这是有道理的:对于一个接口或抽象类的实现,没有什么可以强迫将其实现与其基本接口/基类放在同一包中。在同一个项目中,您可能
B在不同的包中有两个名为的类:编译器应该做什么?
现在,根据代码风格惯例,你要么弥补自己还是得服从你的工作环境,这样的通配符进口可能纯粹是被禁止的,而你必须进口
A和
B分开。至于静态导入,它们还有其他问题…
最后,请注意,默认情况下,
java.lang.*无需声明导入就可以使用全部。



