1、Java访问权限修饰词
public、protected和private这几个Java访问权限修饰词在使用时,是置于类中每个成员的定义之前的--无论它是一个域还是一个方法。每个访问权限修饰词仅控制它所修饰的特定定义的访问权。
如果不提供任何访问权限修饰词,则意味着它是“包访问权限”。因此,无论如何,所有事物都具有某种形式的访问权限控制。
一、包访问权限
默认访问权限没有任何关键字,但通常是指包访问权限(有时也表示成为friendly)。这就意味着当前的包中的所有其他类对那个成员都有访问权限,但对于这个包之外的所有类,这个成员却是private。由于一个编译单元(即一个文件),只能隶属于一个包,所以经由包访问权限,处于同一个编译单元中的所有类彼此之间都是自动可访问的。
包访问权限允许将包内所有相关的类组合起来,以使它们彼此之间可以轻松的相互作用。当把类组织起来放进一个包内之时,也就给它们的包访问权限的成员赋予了相互访问的权限,你“拥有”了该包内的程序代码。
取得对某成员的访问权的唯一途径是:
1、使该成员成为public。
2、通过不加访问权限修饰词并将其他类放置于同一个包内的方式给成员赋予包访问权。
3、继承技术,继承的类既可以访问public成员也可以访问protected成员(但不能访问private成员)。只有在两
个类都处于同一个包内时,它才可以访问包访问权限的成员。
4、提供访问器(accessor)和变异器(mutator)方法(也称作get/set方法),以读取和改变数值。
二、public:接口访问权限
使用关键字public,就意味着public之后紧跟着的成员声明自己对每个人都是可用的,尤其是使用类库的客户程序员更是如此。
不要错误的认为Java总是将当前目录视作是查找行为的起点之一。如果你的CLASSPATH之中缺少一个“.”作为路径之一的话,Java就不会查找那里。
默认包
为了使文件可以被编译,在你的CLASSPATH之中一定要有“.”。
三、private:你无法访问
关键字private的意思是,除了包含该成员的类之外,其他任何类都无法访问这个成员。
默认的包访问权限通常已经提供了充足的隐藏措施。默认访问权限是一种我们常用的权限,同时也是一种在忘记添加任何访问权限控制时能够自动得到的权限。事实证明,对private的使用很重要,尤其是在多线程环境下。
任何可以肯定只是该类的一个“助手”方法的方法,都可以把它指定为private,以确保不会在包内的其他地方误用到它。
对于类中的private域同样适用。
四、protected:继承访问权限
关键字protected处理的是继承的概念,通过继承可以利用一个现有类--我们将其称为基类,然后将新成员添加到该现有类中而不必碰该现有类。还可以改变该类的现有成员的行为。为了从现有类中继承,需要声明新类extends(扩展)了一个现有类。
如果创建了一个新包,并自另一个包中继承类,那么唯一可以访问的成员就是源包的public成员。(当然,如果在同一个包内执行继承工作,就可以操纵所有的拥有包访问权限的成员。)有时,基类的创建者会希望有某个特定成员,把对它的访问权限赋予派生类而不是所有类。这就需要protected来完成这一工作。protected也提供包访问权限,也就是说,相同包内的其他类可以访问protected元素。