Thinking in java 第六章 - 访问权限控制

Thinking in java 第六章 - 访问权限控制

访问控制(或隐藏具体实现)与 “最初的实现并不恰当”有关。

        重构的原动力之一是,有时可能会发现有更好的方式去实现相同的功能。
        重构即重写代码,以使得它更可读、更易理解,并因此更具可维护性。

如何把变动的事物与保持不变的事物区分开来

1 包:库单元

import java.util.*;

        我们之所以要导入,就是要提供一个管理名字空间的机制。由于名字之间的潜在冲突,在Java中对名称空间进行完全控制并为每个类创建唯一的标识符组合就成为了非常重要的事情。
        一个Java源文件就是一个编译单元,该类的名称必须与文件的名称相同,每个编译单元中只能含有一个public类,否则编译器不会接受。

1.1 代码组织

        Java可运行程序是一组可以打包并压缩为一个Java文档文件(JAR,使用Java的jar文档生成器)的**.class**文件。Java解释器负责这些文件的查找、装载和解释。

        packageimport 关键字允许你做的,是将单一的全局名字空间分割开,使得无数多少人使用Internet以及Java开始编写类,都不会出现名称冲突问题。

1.2 创建独一无二的包名

        一个包从未真正将被打包的东西包装成单一的文件,并且一个包可以由许多**.class**文件构成。为了避免这中情况的发生,一种合乎逻辑的做法就是将特定包的所有.class文件都置于一个目录下。也就是说,利用操作系统的层次化的文件结构来解决这一问题。
        在使用了有冲突名字的情况下,必须返回到指定全名的方式。

1.3 定制工具库

        创建自己的工具库来减少或消除重复的程序代码了。

1.4 用import改变行为

        Java没有C的条件编译功能,该功能可以使你不必更改任何程序代码,就能够切换开关并产生不同的行为。(没必要,C主要用来解决跨平台问题。)
        可以通过修改被导入的package的方法来实现调试功能,修改的方法是将你程序中用到的代码从调试版改为发布版。这一技术可以使用于任何种类的条件代码。

1.5 对使用包的忠告

        注意,编译过的代码通常放置在与源代码的不同目录中,但是必须保证JVM使用CLASSPATH可以找到该路径。

2 Java访问权限修饰词

        访问修饰符是置于类中每个成员的定义之前的 - 无论它是一个域还是一个方法。每个访问权限修饰词仅控制它所修饰的特定定义的访问权。
        无论如何,所有事物都具有某种形式的访问权限控制。

2.1 包访问权限

        意味着当前的包中的所有其他类对那个成员都有访问权限,但对于这个包之外的所有类,这个成员却是private
        包访问权限允许将包内所有相关的类组合起来,以使它们彼此之间可以轻松地相互作用。

取得对某成员的访问权的唯一途径是:

  1. 使该成员成为public
  2. 通过不加访问权限修饰符并将其他类放置于同一个包内的方式给成员赋予包访问权。于是包内的其他类也就可以访问该成员了
  3. 使用继承时,继承而来的类可以访问public成员也可以访问protected成员(private成员不行)
  4. 提供访问器(get)和变异器(set)
2.2 public:接口访问权限
2.3 private:你无法访问

        除了包含该成员的类之外,其他任何类都无法访问这个成员。

2.4 protected:继承访问权限

        有时,基类的创建者会希望有某个特定成员,把对它的访问权限赋予派生类而不是所有类。

3 接口和实现

        访问权限的控制被称为是具体实现的隐藏。把数据和方法包装到类中,以及具体实现的隐藏,常共同被称作是封装
重要原因:

  1. 设定客户端程序员可以使用和不可以使用的界限
  2. 将接口和具体实现进行分离

4 类的访问权限

  1. 每个编译单元(文件)都只能有一个public类
  2. public类的名称必须完全与含有该编译单元的文件名相匹配,包括大小写
  3. 编译单元内完全不带public类也是可以的,此时可以随意对文件命名。

        类只有包访问权限和public,特例,内部类可以是private或是protected。

5 总结

        本章讨论了类是如何被构建成类库的:首先,介绍了一组类是如何被打包到一个类库中的;其次,类是如何控制对其成员的访问的。
        控制对成员的访问权限有两个原因:

  1. 使用户不要碰触那些他们不该触碰的部分,这些部分对于类内部的操作是必要的,但是它并不属于客户端程序员所需接口的一部分。
  2. 为了让类库设计者可以更改类的内部工作方式,而不必担心这样会对客户端程序员产生重大的影响

        注意,访问权限控制专注于类库创建者和该类库的外部使用者之间的关系,这种关系也是一种通信方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值