在Java中,package-private是默认的访问级别(未指定公开性修饰符:public,protected,private)。这样类的成员(方法、字段或类本身)仅在同一包内可访问。
class MyClass { /* ... */ } void doSomething() { /* ... */ }
示例:
// 文件:com/example/internal/Helper.java class Helper { static void help() { System.out.println("helped"); } }
如果类或方法是实现的内部细节,始终使用package-private。
问题: package-private类能通过继承或import在其他包内可见吗?
答案: 不可以,package-private成员不能通过继承或从其他包中的import访问——它们仅在其包内可访问。
故事
在一个大型项目中,不同的团队开始为实用逻辑使用package-private类。当尝试从其他包中重用代码时,无法访问——访问不可。结果不得不将类设为public,从而暴露了内部实现。
故事
在一个多模块项目中,package-private类在编写单元测试时导致了问题:其他包中的测试看不到package-private方法,最终不得不将测试移动到源包内或降低访问级别。
故事
在将代码迁移到新包时出现了意想不到的编译时错误——许多方法和类意外“消失”,因为它们是package-private,迁移后变得不可访问。