编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

对象导论:被隐藏的具体实现(访问控制)

将程序开发人员按照角色分为类创建者和客户端程序员是大有裨益的。客户端程序员的目标是收集各种用来实现快速应用开发的类。类创建者的目标是构建类,这种类只向客户端程序员暴露必须的部分,而隐藏其他部分。为什么要这样呢?因为如果加以隐藏,那么客户端程序员将不能够访问它,这意味着类创建者可以任意修改被隐藏的部分,而不用担心对其他任何人造成影响。被隐藏的部分通常代表对象内部脆弱的部分,他们很容易被粗心的或者不知内情的客户端程序员所毁坏,因此将实现隐藏起来可以减少程序bug。

在任何相互关系中,具有关系所涉及的各方都遵守的边界是能十分重要的事情。当创建一个类库时,就建立了与客户端程序员之间的关系,他们同样也是程序员,但是他们是使用你的类库来构建应用、或者构建更多的类库的程序员。如果所有的类成员对任何人都是可用的,那么客户端程序员就可以对类做任何事情,而不受任何约束。即使你希望客户端程序员不要直接操作你的类中的某些成员,但是如果没有任何访问控制,将无法阻止此事发生。所有东西都将赤裸裸地暴露于世人面前。

因此,访问控制的第一个存在原因就是让客户端程序员无法触及他们不应该触及的部分---这些部分对数据类型的内部操作来说是必需的,但并不是用户解决特定问题所需要的接口的一部分。这对客户端程序员来说其实是一项服务,因为他们可以很容易地看出哪些东西对他们来说很重要,而哪些东西可以忽略。

访问控制的第二个存在的原因就是允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。例如,你可能为了减轻开发任务而以某种简单的方式实现了某个特定的类,但稍后发现你必须改写它才能使其运行的更快。如果接口和实现可以清晰地分离并得以保护,那么你就可以轻而易举的完成这项工作。

Java用三个关键字在类的内部设定边界:public、private、protected。这些访问指定词决定了紧跟其后被定义的东西可以被谁使用。

public表示紧随其后的元素对任何人都可以用。

private这个关键字表示除类型创建者和类型内部的方法之外的的任何人都不能访问的元素。private就像你与客户端程序员之间的一堵砖墙,如果有人试图访问private成员,就会在编译时得到错误信息。

protected关键字与private作用相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员。

Java还有一种默认的访问权限,当没有使用前面提到的任何访问指定词时,它将发挥作用。这种权限通常被称为包访问权限,因为在这种权限下,类可以访问在同一包中的其他类成员,但是在包之外,这些成员如同指定了private一样。

未经允许不得转载: 技术文章 » Java编程 » 对象导论:被隐藏的具体实现(访问控制)