Java之访问控制
Java 引入访问控制的原因
- 防止用户(客户端程序员)接触他们不应该接触的工具。对于数据的内部机制,这些工具是必需的,但是他们并不属于用户接口的一部分,用户不需要直接接触不应该接触的工具,避免类的内部被破坏。
- 将变与不变的部分分离,允许库设计者改变类的内部工作机制。同时不必担心会对客户程序员产生影响,特别当库设计者要重构代码时,接口与事实细节早已进行了更明确的分割和保护,库设计者可以更高效的重构。
访问控制的最终目的是实现 高内聚,低耦合
的目标
Java 访问控制的修饰词
Java 提供了四个访问控制的修饰词,按照控制级别由小到大依次为 private
, default
, protected
, public
。
1、 private : Java 中对访问权限控制最窄的修饰词,一般称为 “私有的” 。被其修饰的属性以及方法只能被该类的对象访问,其子类不能访问,更不允许挎包访问。类的良好封装就是通过
private
关键字实现的。调用方式:在包含类中直接调用。2、 default :即不加任何访问修饰词,通常被称为 “默认访问权限” 或者 “包访问权限” 。在该模式下,只允许在同一个包中进行访问。调用方式:通过类实例(静态方法通过类调用)调用。
3、 protected :介于
public
和private
之间的一种访问修饰词,一般被称为 “保护访问权限” 。被其修饰的属性以及方法既能被类本身的方法及子类访问,又能被不同包下该类的子类访问。调用方式:在派生类中直接调用。4、 public : Java 中访问限制最宽的修饰词,一般称为 “公共的” 。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许挎包访问。调用方式:通过类实例(静态方法通过类调用)调用。
用表格来展示四种修饰词的访问权限范围:
权限 | 类内 | 同包 | 不同包子类 | 不同包非子类 |
---|---|---|---|---|
private | Yes | No | No | No |
default | Yes | Yes | No | No |
protected | Yes | Yes | Yes | No |
public | Yes | Yes | Yes | Yes |
留心脚下
在 Java 中,访问权限修饰词也可以修饰类。
使用方法:将修饰词置于 class
前边即可。
类的修饰符只有 public
和 default
,它不可以是 private
和 protected
(内部类除外)。
知识补给
类的定义限定:
1、每个 Java 文件只能有一个 public class
2、 public class 的名称和 Java 文件的名称必须保持一致
3、 Java 文件中可以没有 public
修饰的 class ,这个时候会有一个默认的权限,即包访问权限,此时文件的名称就没有限定。这种方式会降低代码的可读性和可维护性。