6 访问权限控制

 访问权限控制

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

     所有优秀的作者,包括哪些编写软件的程序员,都清楚其著作的某些部分直至重新创作的时候才变得完美,优势甚至要反复重写多次。如果你把一个代码段放到了某个位置,等过一会儿回头再看时,有可能会发现更好的方式去实现相同的功能。这正是重构的原动力之一,重构即重写代码,以使得它更可读、更易理解,并且因此而更具有可维护性。

      但是,在这种修改和完善代码的愿望之下,也存在着巨大的压力。通常总是会有一些消费者(客户端程序员)需要你的代码在某些方面在面向对象设计中需要考虑的一个基本问题:“如何把变动的事物与保持不变的事物区分开来”。

     这对类库(library)而言尤为重要。该类库的消费者必须依赖所使用的的那部分类库,并且能够知道如果类库出现了新版本,他们并不需要改写代码。从另一个方面来说,类库的开发者必须有权限进行修改和改进,并确保客户代码不会因为这些改动而受影响。

     这一目标可以通过约定来达到。

     例如,类库开发者必须统一再改动类库中的类时不得删除任何现有方法,因为那些会破坏客户端程序员的代码。但是,与之相反的情况会更加棘手。在有域(即数据成员)存在的情况下,类库开发者要怎样才能知道究竟都有哪些域已经被客户端程序员调用了呢?这对于方法仅为类的实现的一部分,因此并不想让客户端程序员直接使用的情况来说同样如此。如果程序开发者想要移除旧的实现而要添加新的实现时,结果将会怎样呢?改动任何一个程序员都有可能破坏客户端程序员的代码。于是类库开发者会手脚被束缚,无法对任何事物进行改动。

       为了解决这一问题,Java提供了访问权限修饰词,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的。访问权限控制的等级,从最大权限到最小权限依次为

       Public、protected、包访问权限(没有关键词)、和private

      根据前述内容读者可能会认为,作为一名类库设计员,你会尽可能将一切方法都定位private,而仅向客户端程序员公开你原意让他们使用的方法。这样做是完全正确的,尽管对于那些经常使用别的语言(特别是C语言)编写程序并在访问事物时不收任何限制的人而言,这与他们的直觉相违背。到了本章末,读者将会信服Java的访问权限控制的价值。

       不过,构建类库的概念以及对于谁有权取用该类库构件的控制问题都还是不完善的。其中仍旧存在着如何将构件捆绑到一个内聚的类库单元中的问题。对于这一点,Java用关键字package加以控制,而访问权限修饰词会因类存在于一个相同的包,还是存在于一个单独的包而受到影响。因此要开始学习本章,首先要学习饿如何将类库构件置于保重,然后就会理解访问权限修饰词的全部含义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值