5: Hiding the Implementation(隐藏实现)
package:类库的单元
创建独一无二的package名字
Java的约定是package名字的第一部分应该是类的创建者的Internet域名的反写。
使用JAR文件的时候会有一点变化。除了要告诉它该到哪里去找这个JAR文件,你必须将文件名放到CLASSPATH里面。
冲突
一个自定义的工具类库
使用import来改变程序的行为方式
使用package的忠告
Java的访问控制符
package访问权限
如果你想让别人能访问到这个成员,那唯一办法就是:
1. 把这个成员做成public的。这样任何人,任何地方就都能访问到它了。
2. 不放任何访问控制符,赋予这个成员package权限,然后往package里面放其它类。这样,这个package的其它类就能访问这个成员了。
3. 继承类除了能访问父类的public成员之外,还可以访问其protected成员(但是不能访问private成员)。只有当两个类都同属一个package的时候,它才能访问package成员。
4. 提供“访问器/修改器”方法(accessor/mutator方法,也被称为“get/set”方法)。以OOP的观点衡量,这是最合理的做法,而且也是JavaBean的基础。
public:访问接口的权限
默认的package
Java会认为这类文件是属于这个目录的“默认”的,因此对这个目录里边的其它文件来说,它们就都是package权限的了。
private:你碰都碰不到!
始终如一地使用private还是很重要的,特别是遇到多线程的时候。
protect:继承的访问权限
接口(Interface)与实现(implementation)
类的访问权限
1. 每个编译单元(文件)只能有一个public类。这么做的意思是,每个编译单元只能有一个公开的接口,而这个接口就由其public类来表示。你可以根据需要,往这个文件里面添加任意多个提供辅助功能的package权限的类。但是如果这个编译单元里面有两个或两个以上的public类的话,编译器就会报错。
2. public类的名字必须和这个编译单元的文件名完全相同,包括大小写。如果你不遵守,编译器又要报错了。
3. 编译单元里面可以没有public类,虽然这种情况不常见,但却是可以的。这是,你就能随意为文件起名字了。
总结
练习
「读书笔记」Thinking in Java 3rd Edition - 6: Reusing Classes