Java Class Accessibility
本问题已经有最佳答案,请猛点这里访问。
与我的另一个问题有点关联:以下两者之间的区别是什么?
1 2 3 4 | private class Joe protected class Joe public class Joe class Joe |
再一次,最后两个的区别是我最感兴趣的。
任何包中的类都可以访问公共类。
具有默认访问权的类(
私有修饰符和受保护修饰符只能应用于内部类。
私有类仅对其封闭类和同一封闭类中的其他内部类可见。
受保护的类对同一包中的其他类以及扩展封闭类的类可见。
在声明中,具有默认访问权限的类前面没有修饰符。
默认访问是包级访问,因为具有默认访问权限的类只能由同一包中的类看到。
如果某个类具有默认访问权限,则另一个包中的某个类将无法创建该类的实例,甚至无法声明变量或返回类型。编译器会抱怨的。例如:
1 2 3 4 5 6 | package humanity; class Person {} package family; import humanity.Person; class Child extends Person {} |
尝试编译这两个源。如您所见,它们位于不同的包中,编译将失败。
- 私有:仅对外部类可见
- 受保护:仅对外部类可见
- 公共:对所有其他类可见
- 类:包私有,因此对同一包中的类可见
更多信息请参见JLS。