访问控制(或隐藏具体实现)与 最初的实现并不恰当 有关
包:库单元
包内包含有一组类 它们在单一的名字空间之下被组织在了一起
使用包中类 可以使用全名来指定 或者import关键字 要想导入包中所有的类 只需要使用 *
一个Java编译单元中 只可以有一个public类 并且名称要与文件的名称相同(包括大小写)
代码组织
当编译一个.java文件时 在.java文件中的每个类都会有一个输出文件 而该输出文件的名称与.java文件中每个类的名称相同 只是多了一个后缀名.class
类库实际上是一组类文件 每个文件都有一个构件 如果希望这些构件从属于同一个群组 可以使用关键字package
package和import关键字允许你做的 是将单一的全局名字空间分割开 使得无论多少人使用Internet以及Java开始编写类 都不会出现名称冲突问题
创建独一无二的包名
可以通过类的创建者的反顺序的Internet域名来创建独一无二的package名称
冲突
在使用了有冲突名字的情况下 必须返回到指定全名的方式
定制工具类
可以创建自己的工具库来减少或消除重复的程序代码
用import改变行为
可以通过修改被导入的package的方法来产生不同的行为
对使用包的忠告
无论何时创建包 都已经在给定包的名称的时候隐含地指定了目录结构
Java访问权限修饰词
包访问权限
默认访问权限没有任何关键字 但通常是指包访问权限(有时也表示成为friendly) 这就意味着当前的包中的所有其他类对那个成员都有访问权限 但对于这个包之外的所有类 这个成员却是private
public:接口访问权限
使用关键字public 就意味着public之后紧跟着的成员声明自己对每个人都是可用的
默认包
如果两个.java文件处于相同的目录并且没有给自己设定任何包名称 Java将这样的文件自动看作是隶属于该目录的默认包之中 于是它们为该目录中所有其他的文件都提供了包访问权限
private:你无法访问
关键字private的意思是 除了包含该成员的类之外 其他任何类都无法访问这个成员
protected:继承访问权限
如果创建了一个新包 并自另一个包中继承类 protected也提供包访问权限 也就是说 相同包内的其他类可以访问protected元素
接口和实现
访问权限的控制常被称为是具体实现的隐藏 把数据和方法包装进类中 以及具体实现的隐藏 常共同被称作是封装 其结果是一个同时带有特征和行为的数据类型
类的访问权限
类既不可以是private的 也不可以是protected 所以对于类的访问权限 仅有两个选择:包访问权限或public 如果不希望其他任何人对该类拥有访问权限 可以把所有的构造器都指定为private 从而阻止任何人创建该类的对象 但是有一个例外 就是你在该类的static成员内部可以创建