我们还没有讨论类成员如何才能在类外进行访问。你知道在一个静态的类方法内可以引用任何静态的类成员,一个非静态的方法可以引用类的任何成员。在一个类中,可以被其他类访问的变量和方法的限制要显得复杂些。它取决于你为类成员指定的访问属性(accessattributes)以及类是否在同一个包中。这也就是我们必须首先了解包的原因。
使用访问属性
让我们先从同一个包中的类开始考虑。在一个给定的包中,任何类都可以直接地访问其他的类名,例如,为了声明变量或者指定方法参数的类型你可以使用类名,但是,这些变量和方法如果是其他类的成员,就不一定可以访问。这些成员的可访问性由访问属性控制。在为一个类成员指定访问属性时,包括迄今为止我们在例子中已经使用过的,你可以有四种选择。要么什么都不指定;要么指定一种,每种访问属性都有完全不同的效果。你可用来为类中变量或方法指定可访问性的选项有:
![](http://www.educity.cn/help/Java/images/20098259497.jpg)
这张列表显示了你为类成员设置的访问属性是如何决定你可以从Java环境中的哪个部分访问它们。在下一章中我们将讨论子类,所以现在不用考虑它。后面我们将返回来介绍怎样以及何时使用protected属性。注意,public. private和protected都是关键字。把一个成员指定为pubic,则它就完全可访问。而另外一个极端,一个private成员将仅局限于同类中的成员可以进行访问。
听起来比实际情况更复杂。请看下一张示意图,它显示了同一个包中类之间允许的访问情况。
![](http://www.educity.cn/help/Java/images/20098257279.jpg)
在一个包内,比如packagel,只是类classl的private成员,不能由同一个包中另一个类的方法直接地访问。把类的成员声明为priVaLe,就限制了它只可在同一个类的方法中使用。