lmstack

导航

初读"Thinking in Java"读书笔记之第六章 --- 访问权限控制

  1. 包:库单元
    • 包内包含有一组类,他们在单一的名字空间下被组织在一起。
    • 通过import ***.***.*可以将某个包下的所有类导入到当前文件中。
    • 每个Java源文件最多只能有一个public类,且名称必须与文件名相同。源文件中的其他类在包外事不可见的,主要用来为public类提供支持。
    • Java的可运行程序是一组可以打包并压缩为一个Java文档文件(jar)的.class文件。
    • package 和import可以将单一的全局名字空间分割开,使得无论多少人使用Java编写类,都不会出现名称冲突问题。
    • 可以通过package创建自己的工具包,并通过import static导入静态方法。
    • 利用import可以实现选择性编译的功能。
    • Java虚拟机可以通过classpath+包名的方法寻找到.class文件的位置。
    • 包名隐含地指定了目录结构。
  2. Java访问权限修饰词
    • 包访问权限
      • 不加修饰词的为包访问权限。
      • 当前包中的所有其他类对该成员或方法都可访问,但对包外而言是私有的。
      • 由于一个.java文件只能属于一个包,因此在一个.java文件中的所有类彼此之间都可以访问。
      • 如果没有明确设置package,那么java会默认该文件夹下的.java文件都默认属于该目录的默认包,都享有包访问权限。
    • public:接口访问权限
      • public声明的成员,对每个人都是可见的。
    • private:无法访问
      • private允许创建者随意改变该成员,而不必考虑这样做是否会影响到包内其他的类。
    • protected:继承访问权限
      • protected 提供包访问权限和派生类访问权限。
  3. 接口和实现
    • 访问权限的控制被称为"具体实现的隐藏"。
    • 将数据和方法包装进类中,并将具体实现隐藏的过程称为封装
    • 访问权限控制将接口和具体实现分离。客户端程序员只能通过public方法向接口发送信息,因此类开发者可以任意修改不是public的内容。
  4. 类的访问权限
    • 每个编译单元只能有一个public类,表示只能有单一的公共接口。
    • 每个编译单元可以不存在public的类,此时文件名可以任意取。
    • 类访问权限不能是private和protected(内部类除外)。
    • 非public类内部如果存在静态public成员的话,仍然可以在外部访问该成员而不会创建对象。
  5. 总结
    • 访问权限控制的原因
      • 一是可以使客户端程序员了解到类的哪些部分对他们是有用的,哪些部分是没用的,简化他们对类的理解
      • 二是可以使类库设计者随意地更改类的内部工作方式,而不用担心对客户端程序员产生重大的影响。

posted on 2018-01-13 20:58  lmstack  阅读(89)  评论(0编辑  收藏  举报