Java - 访问控制 - 基本
-
概述
- Java 访问控制
- 暂时不讲 protected
- 这更像是一篇 总结 而非 教程
- Java 访问控制
-
背景
- 偶然看到了自己很久之前写的一篇关于 访问控制 的内容
- 发现写的并不怎么好
- 所以决定重写
- 偶然看到了自己很久之前写的一篇关于 访问控制 的内容
1. 目的
-
原话
Java 编程语言提供了用于 访问控制 的机制 用以防止包或类的用户对该包或类的实现细节造成不必要的依赖
-
我的理解
- 划分作用域
- 程序解耦
2. 机制
-
确定
- 时期
- 编译时期最终确定
- 时期
-
依赖
- 类型
- 声明修饰符
3. 关键字
- 概述
- 访问控制的关键字
1. public
-
概述
- public
-
作用
- 让修饰的对象, 可以被任何代码访问
-
修饰对象
- 类
- 方法
- 对象
2. default
-
概述
- default
-
作用
- 让修饰的对象, 可以被包内代码访问
- 不加修饰符时的 默认值
-
修饰对象
- 类
- 方法
- 对象
3. private
-
概述
- public
-
作用
- 让修饰的对象, 可以被 同类 代码访问
-
修饰对象
- 方法
- 对象
4. protected
- 概述
- 这次不讲
- 和 继承有关, 最好和 继承 一起讲
4. 可访问性
-
概述
- 再从 Java 代码工程中 各个元素 的维度, 说一下访问控制
-
环境
- 假设, 所有的项目结构和代码, 都在 一个工程下
- 这样比较简单...
- 假设, 所有的项目结构和代码, 都在 一个工程下
1. 包
-
概述
- 包的可见性
-
包
- 必须 public
- 包 对工程内的所有代码都可见
- 无需使用 访问控制关键字
- 必须 public
2. 类
-
概述
- 类的可见性
- 类不能用 private 修饰
- 类的可见性
-
类
-
public
- 所有代码可见
- 一个 class 文件, 只能有一个 public 类
-
default
- 仅仅 同包 代码可见
-
3. 方法
-
概述
- 方法的可见性
-
方法
-
public
- 所有代码可见
-
default
- 包内所有代码可见
-
private
- 最大的范围, 在 包围该成员的 顶层类
-
4. 属性
-
概述
- 属性的可见性
-
属性
- 同 方法
5. 画个表
-
概述
- 最后画个表吧...
-
表格
public | default | private | |
---|---|---|---|
所有代码 | O | X | X |
包内代码 | O | O | X |
同文件顶层类 | O | O | O |
ps
-
ref
- Java 语言规范(SE 8)
-
后续
- 继承与 protected
- 如果 private 的属性, 被 public 的容器引用, 可以从外部访问吗
- 可以
- String 的修改, 会有点问题, 这个以后可能会说
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出