以前对于public、private、protect、default,都只是简单的知道其对应的访问权限范围,现在看了think in java中的描述,讲了这几种访问权限在什么场景下使用,觉得进一步的了解的它存在的意义和合理性。
因为在我们的日常开发中,常常会创建一些自己常用的工具类或者相应的类库,这个时候,权限控制标识符可以使我们更好的组织和维护工具类库,以及给客户端(在这里指工具类库的调用方)对工具类库的调用更加的友好,透明。
default(friendly):即默认的包访问权限
在 java 中,如果没有设定方法或者域的访问权限,那么他默认的访问范围,就是当前包,即当前包下的其他的类,都可以访问。
调用方式:通过类实例(静态方法通过类调用)调用。
public:公开的访问权限,也称接口访问权限。
对于所有的对象都可以访问,通常修复需要被外部调用的方法,即我们需要向外部暴露的接口。
调用方式:通过类实例(静态方法通过类调用)调用。
private:私有的访问权限;只有包含该对象的类,才有访问权限。
对于不想暴露给外部的的方法,那么,我们就可以使用 private,常常修饰 那些 服务于 暴露的外部接口的 方法,及被那些接口调用,这样,我们就可以随意的修改这个方法中的实现,而不用担心会影响到 调用方。
调用方式:在包含类中直接调用。
protect:受保护的访问权限,又称继承访问权限
通常是父类授权给子类访问,即只有派生了父类的子类才可以访问,所以它叫继承访问权限,即必须继承,才可以访问。
调用方式:在派生类中直接调用。
java编程思想中,建议我们在类的权限控制的编写顺序如下:
1.public、2、protect、3、default、4、private
在阅读的时候,这种方式显得更合理、更容易。
注意:这个方式不是强制性的,是建议性的!!!^_^
-------------------------------------------------------------------------------------------------------------------------------
以上讲的都是类内部的权限控制,那么对于类的本身的权限控制又是怎样的呢?继续往下看。
在 Java 中,访问权限修饰词也可以修饰类。使用方法:将修饰词 置于 class 前边即可。
类的修饰符只有 public 和 包访问权限,它不可以是 private 和 protect (内部类除外)。
类的定义的限定:
1)每个 java 文件只能有一个 public class
2)public class 的名称和 java 文件的名称必须保持一致。
3)java 文件中 可以没有 public 修饰的 class,这个时候会有一个默认的权限,即包访问权限,此时文件的名称就没有限定。(这种方式降低代码的可读性和可维护性)
------------------------------------------------------------------------------------------------------------------------------
到此,权限控制的东东就讲得差不多了,那么为什么会产生这个东西呢?相信你看了上边得介绍,就会得出如下两个原因:
1)为了使 类调用方 不要访问到他们不该访问得内容,对于 类调用方 而言,他们就是一种服务。
2)为了让 类库设计者 可以更改 类的内部实现,而不必去担心会 影响 到 类的调用方。