public、protected、private这几个Java访问权限修饰词在使用时,是置于类中每个成员的定义之前的,无论它是一个域还是一个方法。每个访问权限修饰词仅控制它所修饰的特定定义的访问权。如果不提供任何访问权限修饰词,则意味着它是包访问权限
1:包访问权限
默认访问权限没有任何关键字,但通常是指包访问权限 (有时也表示成为friendly)。这就意味着当前的包中的所有其他类对那个成员都有访问权限,但是对于这个包之外的所有类,这个成员是private。由于一个编译单元,即一个文件,只能隶属于一个包,所以经由包访问权限,处于同一个编译单元的所有类彼此之间都是可以自动访问的。
通俗一点来讲,就是一个.java文件就是一个编译单元,只能隶属于一个包,如果这个.java文件的域或者是方法没有任何关键字,就是默认包访问权限,意味着这个包下的其他所有类都可以访问这个没有任何关键字的默认访问权限的成员。而对于这个包之外的所有类,这个成员是private。
包:Java中的一个package(包)就是一个类库单元,包内包含有一组类,它们在单一的名称空间之下被组织在了一起。这个名称空间就是包名。
2:public 接口访问权限
public之后紧跟着的成员声明自己对每个人都是可用的。
默认包:如果两个文件处于相同的目录并且没有给自己设定任何的包名称。Java将这样的文件自动看作是隶属于该目录的默认包之中,于是它们为该目录中所有其他的文件都提供了包访问权限。
通俗一点儿来说,就是有两个不同的.java文件,但是它们位于同一个目录下并且没有给自己设定任何的包名称,它们属于默认包,该目录中的其他文件对着两个.java文件中的具有包访问权限的域或者是方法都具有包访问权限。
3:private 你无法访问
private的意思是,除了包含该成员的类之外,其他任何类都无法访问这个成员。由于处于同一个包内的其他类是不可以访问private成员的,因此这等于说是自己隔离了自己。
4:protected 继承访问权限
protected的意思是,如果一个包中一个类继承了另外一个包中的一个类,继承的叫派生类,被继承的叫基类。派生类拥有基类中的protected修饰的成员的访问权限。同时,protected还提供包访问权限。
5:类访问权限
在Java中,访问权限修饰词也可以用于确定库中的那些类对于该库的使用者是可用的。
限制:
a: 每个编译单元(文件)都只能有一个public类。这表示,每个编译单元都有单一的公共接口,用public类来实现。该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出出错信息。
b:public 类的名称必须完全与含有该编译单元的文件名相匹配,包括大小写,如果不匹配,同样将会得到编译时错误。
c:虽然不是很常用,但编译单元内完全不带public类也是可能的。在这种情况下,可以随意对文件命名。尽管随意命名会使得人们在阅读和维护代码时产生混淆。