多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### [默认包](https://lingcoder.gitee.io/onjava8/#/book/07-Implementation-Hiding?id=%e9%bb%98%e8%ae%a4%e5%8c%85) 你可能惊讶地发现,以下代码尽管看上去破坏了规则,但是仍然可以编译: ~~~ // hiding/Cake.java // Accesses a class in a separate compilation unit class Cake { public static void main(String[] args) { Pie x = new Pie(); x.f(); } } ~~~ 输出: ~~~ Pie.f() ~~~ 同一目录下的第二个文件: ~~~ // hiding/Pie.java // The other class class Pie { void f() { System.out.println("Pie.f()"); } } ~~~ 最初看上去这两个文件毫不相关,但在**Cake**中可以创建一个**Pie**对象并调用它的`f()`方法。(注意,你的 CLASSPATH 中一定得有**.\*\*,这样文件才能编译)通常会认为 \*\*Pie**和`f()`具有包访问权限,因此不能被**Cake**访问。它们的确具有包访问权限,这是部分正确。**Cake.java**可以访问它们是因为它们在相同的目录中且没有给自己设定明确的包名。Java 把这样的文件看作是隶属于该目录的默认包中,因此它们为该目录中所有的其他文件都提供了包访问权限。