访问权限控制

Posted 蔚然丶丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了访问权限控制相关的知识,希望对你有一定的参考价值。

public、protected、default、private

第六章 访问权限控制

6.1 包:库单元

  包内含有一组类,它们在单一的名字空间之下被组织在了一起。

  当编写一个Java源代码文件时,此文件通常被称为编译单元。每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件名称相同,包括大小写,但不包括后缀名.java。每个编译单元必须只能有一个public类,否则编译器就不会接受。如果在该编译单元之外还有额外的类的话,那么在包之外的世界是无法看见这些类的,这是因为它们不是public类,而且它们主要为主public类提供支持。

  如果希望这些构件从属同一个群组,可以使用关键字package,且必须在除注释外的第一行。如果想在其它地方使用群组中的任意public类,需要import导入。

  package和import要做的就是将单一的全局名字分割开,无论多少人使用都不会出现名称冲突。

6.2 Java访问权限修饰词

6.2.1 包访问权限

  默认访问权限没有任何关键字(有时也表示为friendly),但通常是指包访问权限。当前包内所有类对该成员都有访问权限,但包外的类看来,该成员是private。

  取得对某成员的访问唯一途径是:

  1. 使该成员成为public
  2. 通过不加访问权限修饰词并放置于同一包内。
  3. 通过继承而来的类,可以访问public和protected成员,但private不行。(protected和包权限在同一包中相同,但在包外继承时只有关键字protected和public才能访问)
  4. 提供访问器和变异器(也称get/set方法),对OOP而言,这是最优雅的方式,也是JavaBean的原理。

6.2.2 public:接口访问权限

6.2.3 private:你无法访问

6.2.4 protected:继承访问权限

  1. 父类的protected成员包内可见,并且对子类可见。
  2. 若子类与父类不在同一包中,那么在子类中,子类实例可访问从父类继承的protected方法,而不能访问父类实例调用的protected方法。
            类内部 本包 子类  外部包 
 public       √    √   √    √
 protected    √    √   √    ×
 default      √    √   ×    ×
 private      √    ×   ×    ×

6.3 类的访问权限

  1. 每个编译单元(文件)都只能有一个public类。
  2. public类的名称必须完全与含有该编译单元的文件名相同。
  3. 虽然不常用,但编译单元内完全不带public类也是可能的。
  4. 所以对于类的访问权限,仅有两个选择:包访问权限或public。

以上是关于访问权限控制的主要内容,如果未能解决你的问题,请参考以下文章

基于角色与基于资源的权限访问控制

访问权限控制

Java之路 访问权限控制

访问控制权限

facl访问控制权限管理

[THINKING IN JAVA]访问权限控制