You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Java编译器认为无package声明的同目录两文件属于同一包?

结论

Java编译器会将同一目录下未显式声明package的所有类,统一归属于同一个无名包(unnamed package),你遇到的编译表现完全符合Java语言规范的设计。

原理说明

  • Java类的缺省访问修饰符(未写public/protected/private的类、成员)为包级私有,仅允许同一包内的类访问。
  • 你的示例中,Square、Triangle都是缺省修饰符,且和App都没有声明package,三者同属一个无名包,因此App可以正常访问这两个类,编译不会报错。
  • 当你为两个文件分别声明package A和package B后,两个类归属不同的命名包,缺省修饰符的类跨包不可访问,因此编译失败,符合预期。

补充提示

无名包仅用于快速编写小型测试代码,正式项目要求所有类必须显式声明所属package,避免类名冲突、访问控制混乱等问题。

内容的提问来源于stack exchange,提问作者Tthis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:54:03