原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/11/28/2793339.html
访问级别修饰符决定了其他类是否可以使用它的特定字段或调用特定方法,有两种级别的访问控制:
顶层级别—public,或者包内私有(没有显式的修饰符)
成员级别—public,private,protected,或者包内私有(没有显式的修饰符)
一个类可以使用public修饰,这个情况,类可以在任何地方被其他类访问。如果类没有修饰符(默认,就是包私有),它只能在自己的包内是可见的(包是相关类的一个组,后面会学习的)
在成员级别,你可以使用public修饰符或者是没有修饰符(包内私有),这个和顶层类级别一样,表示一样的含义。对于成员来说,有两个附加的访问修饰符:private和protected.private修饰符表示这个成员只能被自己的类访问,protected修饰符表示,这个成员只能在自己的包内访问(如包内私有),但是,附加的是,在其它包里,可以被它的子类访问。
下面的表格显示每个修饰符的成员访问许可
Modifier | Class | Package | Subclass | World |
---|---|---|---|---|
public |
Y | Y | Y | Y |
protected |
Y | Y | Y | N |
no modifier | Y | Y | N | N |
private |
Y | N | N | N |
第一列指示,在该访问级别,类本身是否有权限访问成员。正如你看到的,一个类总是可以访问它的成员。第二列只是在同个包的类(不管是否继承的关系)是否有权限访问成员,第三列指示包外的类是否有权限访问该成员。第四列指示全部的类是否有权限访问该成员。
访问级别影响你两个方面。第一,当你使用来自其他来源的类,如Java平台的类,访问级别确定你自己的类可以使用这些类的哪些成员。第二,当你写一个类,你需要决定每一个成员变量和每个方法应该有什么样的访问级别。
让我们来看看类的集合和访问级别如何影响可见性。下图在这个例子中显示四大类,还有它们之间的关系。
说明类和包的访问级别的例子
下面的表显示了Alpha类的成员在每个访问修饰符,它们对于其它类是否可见。
Modifier | Alpha | Beta | Alphasub | Gamma |
---|---|---|---|---|
public |
Y | Y | Y | Y |
protected |
Y | Y | Y | N |
no modifier | Y | Y | N | N |
private |
Y | N | N | N |
如何选择访问级别:
如果其他程序员使用你的类,你要确保滥用不会导致发生错误,访问级别可以帮助你做到这一点。
使用最严格的访问级别,对于特定成员来说是合理的。尽可能使用private,除非你有一个很好的理由不用。
除了常量,其他字段避免public(在本教程中的许多例子中使用public字段。这可能有助于简洁的说明,但不建议用于生产代码。)public字段往往导致你一个特定的实现,限制你改变你的代码的灵活性。