Java - 访问控制 - 基本

  1. 概述

    1. Java 访问控制
      1. 暂时不讲 protected
    2. 这更像是一篇 总结 而非 教程
  2. 背景

    1. 偶然看到了自己很久之前写的一篇关于 访问控制 的内容
      1. 发现写的并不怎么好
      2. 所以决定重写

1. 目的

  1. 原话

    Java 编程语言提供了用于 访问控制 的机制
    用以防止包或类的用户对该包或类的实现细节造成不必要的依赖
    
  2. 我的理解

    1. 划分作用域
    2. 程序解耦

2. 机制

  1. 确定

    1. 时期
      1. 编译时期最终确定
  2. 依赖

    1. 类型
    2. 声明修饰符

3. 关键字

  1. 概述
    1. 访问控制的关键字

1. public

  1. 概述

    1. public
  2. 作用

    1. 让修饰的对象, 可以被任何代码访问
  3. 修饰对象

    1. 方法
    2. 对象

2. default

  1. 概述

    1. default
  2. 作用

    1. 让修饰的对象, 可以被包内代码访问
    2. 不加修饰符时的 默认值
  3. 修饰对象

    1. 方法
    2. 对象

3. private

  1. 概述

    1. public
  2. 作用

    1. 让修饰的对象, 可以被 同类 代码访问
  3. 修饰对象

    1. 方法
    2. 对象

4. protected

  1. 概述
    1. 这次不讲
    2. 和 继承有关, 最好和 继承 一起讲

4. 可访问性

  1. 概述

    1. 再从 Java 代码工程中 各个元素 的维度, 说一下访问控制
  2. 环境

    1. 假设, 所有的项目结构和代码, 都在 一个工程下
      1. 这样比较简单...

1. 包

  1. 概述

    1. 包的可见性
    1. 必须 public
      1. 包 对工程内的所有代码都可见
      2. 无需使用 访问控制关键字

2. 类

  1. 概述

    1. 类的可见性
      1. 类不能用 private 修饰
    1. public

      1. 所有代码可见
      2. 一个 class 文件, 只能有一个 public 类
    2. default

      1. 仅仅 同包 代码可见

3. 方法

  1. 概述

    1. 方法的可见性
  2. 方法

    1. public

      1. 所有代码可见
    2. default

      1. 包内所有代码可见
    3. private

      1. 最大的范围, 在 包围该成员的 顶层类

4. 属性

  1. 概述

    1. 属性的可见性
  2. 属性

    1. 同 方法

5. 画个表

  1. 概述

    1. 最后画个表吧...
  2. 表格

public default private
所有代码 O X X
包内代码 O O X
同文件顶层类 O O O

ps

  1. ref

    1. Java 语言规范(SE 8)
  2. 后续

    1. 继承与 protected
    2. 如果 private 的属性, 被 public 的容器引用, 可以从外部访问吗
      1. 可以
      2. String 的修改, 会有点问题, 这个以后可能会说
posted @ 2020-05-26 23:38  轩辕拾銉  阅读(236)  评论(0编辑  收藏  举报