《Java编程思想》06.访问权限控制
- 如何把变动的事物与保持不变的事物区分开来
- 访问权限控制的等级(大->小):public、protected、包访问权限(没有关键词)、private
包:库单元
代码组织
- 编译一个.java文件,文件中的每个类都会有一个输出文件.class,文件名与类名相同
- Java的可运行程序是一组可以打包并压缩为一个Java文档文件(
JAR
)的.class文件。Java解释器负责这些文件的查找、装载和解释 - 类库 ---实际上---> 一组类晚间
- Java包的命名规则全部使用小写字母
package access.mypackage;
public class MyClass{ /* ... */ }
使用import来使access中的名称可用
import access.mypackage.MyClass
创建独一无二的包名
- package名称的第一部分:类的创建者的反序Internet域名
思考:
条件编译
Java访问权限修饰词
包访问权限
- 默认访问权限(没有任何关键字)
- 有时也表示成friendly
包中的类相对于:
当前包所有其他类 | 包之外的所有类 |
---|---|
有访问权限 | 相当于与private |
取得某成员的访问权限的途径
- 使改成员为public
- 成员不加修饰词 & 其他类置于同一个包
- 继承 - 可访问public成员、protected成员
- 提供访问其(accessor)和变异器(mutator) - get/set方法
public:接口访问权限
private:你无法访问
通常考虑的是,那些成员是想要明确公开给客户端程序员使用的,从而将它们声明为public,而在最初,你可能不会认为自己经常会需要使用private,因为没有它,照样可以工作。然而,事实很快就会证明,对private的使用是多么的重要,在多线程下更是如此。
- 任何可以肯定只是该类的一个“助手”方法的方法,都可以把它指定为private,确保不会在包内的其他地方误用
protected:继承访问权限
接口和实现
访问权限的控制->具体实现的隐藏、封装
- 设定客户端程序员可以使用和不可以使用的边界
- 将接口和具体实现进行分离
类的访问权限
- 对于类的访问权限,仅有两个选择:包访问权限或public
总结
- 控制成员的访问权限的两个原因:
- 使用户不要触碰那些不该触碰的部分
- 让类库设计者可以更改类的内部工作方式
面向扩展开放,面向修改关闭
当具备了改变底层实施细节的能力,不仅可以随意地改善设计,还可能会随意地犯错误,当了解到你所犯的错误是相对安全的时候,就可以更加放心地进行实验,也就可以更快地学会,更快地完成项目