Java编程思想之6访问权限控制

这一章比较简单。

封装

以前开始学面向对象编程的时候,就开始背:封装继承多态。有一次面试的时候,人家问我:封装的目的是什么??我居然答不上来。

这一章的名字是:访问权限的控制,开始的时候,我都想跳过这一章不读了。感觉没什么意思,就是 public  protected  private 嘛。读了两遍后,才感觉到,这一章其实是比较重要的,虽然它比较简单。

我感觉很多书都会把这一章的题目叫做:封装。 因为前面是把基本语法讲完了。这一章开始面向对象了,第一个就自然是封装了。但为什么这么伟大的一本书,就把这一章叫做了:访问权限的控制。  我感觉原因是,这才是封装的本质,比封装这两个字更能说明这个特性。根据120页的定义:把数据和方法包装进类中,以及具体实现的隐藏叫做封装。数据和方法包装到类里面,这个我们大家都知道的。这个应该也是非常重要的,因为面向对象编程有一项优势就是这个,这样更适合定义问题空间。而更重要的是具体实现的隐藏,因为编写软件一直以来都是想要代码复用,易修改,易扩展。包括最最经典的设计模式,也是有一个基本的原则:将变化的部分和不变的部分分开。所以,如果能将具体的实现隐藏,只留给使用代码的人(客户端)必要的接口,这样就比较容易代码修改了。只要是private方法,我就可以随意修改。访问权限的控制,提供了一个边界,一部分接口(公共方法)是让外界程序员调用的,一部分方法是辅助方法,是辅助那些公共方法的。辅助方法一般仅仅是自己用,就可以容易修改了,而不用担心是否已经有客户使用了这个方法。这便是这一章最主要的内容了。访问权限的控制 和 具体实现的隐藏实际是一个东西。另外,封装能使得代码更容易维持不变性条件。

任何一门语言都是智慧的结晶。像Java这样的伟大的语言,更是许多计算机天才智慧的结晶。  因此,任何一个语言特性都有它出现的道理,不可能是哪个科学家随意添加的。就像前面的封装一样,它是那么的重要,有了这个特性,就可以让计算机语言更适合描述问题(数据和方法包装在一起),有了这个特性就更容易的实现代码的修改代码的复用(访问权限的控制),所以Java一定要支持这个特性。

包的出现也不是凭空的最开始的C语言,没有这个类似的概念,没有这个类似的特性。那么就很容易出现命名的冲突,你定义了一个f()方法,我也定义了一个f()方法。咱们两个代码整合时,就很容易发生冲突。C++接受了这个教训,就有了命名空间这个特性。Java沿用了这个特性。有了它,就不容易产生类名的冲突了。你可以写一个Student类,我也可以写一个Student类,只要它们在不同的包,就可以共存于同一个项目。另外,如果你想要发布代码,让别人都可以用的话,就最好有一个独一无二的包名。

一个.java文件,只能有一个Public类,这个类的名字需要跟文件名相同为什么要有这个特性呢????这其实是很自然的,首先方便程序员浏览,看看类文件名就知道这里面是哪个类。其次,我感觉也方便虚拟机去加载类。只要根据文件名和路径就可以找到对应的类。 代码重构上讲:要尽量暴露你的目的,代码其实是最好的注释,取一个合适恰当的名字,就是最好的注释了。所以,文件名就是为了暴露这个文件里面的主类的功能的。可以很方便的让别的程序员了解代码。  一个.java文件除了这个public类之外,还有一些辅助类,为什么要搞的这么复杂???,不要烦躁。确实,没有这个特性确实学起来简单了一点。每个java文件都知包含一个public类,整个代码很清晰。但是存在就有它的道理。一个public类如果独自完成它的全部功能,有时后会感觉比较吃力,代码比较乱。可以把功能分成几个小功能。让不同的类去实现。但是,这些类,我又不愿意让外人知道,因为这些类是辅助我public类的。

一个java文件,可以没有public类,但是最多有一个public类,如果有Public类,那么这个类就必须跟文件名相同。可以有0个到多个辅助类。java编程思想(第4版)第111页上说,意味着该文件中有且只有一个Public类, 感觉这句话是有问题的。 完全可以没有public类

类的访问权限

一个方法一个域有四种访问权限:public  protected  包访问  private。  这四个权限可以比较好的分出界限,让谁用不让谁用,都有了比较清楚的界限。  为什么类只有两个????类有两个权限,一个public   一个包访问权限。  public就是说这个类可以随便外界使用,包访问权限就是辅助类的权限了,只允许同一个包内的别的类使用该辅助类。  如果是要添加private控制一个类的权限,那么想表达什么意思呢???可能会说,我在辅助类的前面添加上一个Private,就想控制:仅仅允许同一个java文件内的主类使用这个类。 有没有这个需求呢???肯定有,因为如果这个辅助类仅仅属于这一个主类,那么我就可以方便修改了,而不用管别的类是否在使用。 但是Java为什么没有设定这个private权限?  答案是:Java提供了一个更容易理解的方式--内部类 实现了这个需求。 用private修饰一个辅助类,其实是不符合private的意思的。所以用内部类来表示显的更自然。  那类为什么没有protected呢??我感觉没有这个需求吧。 别的类要想继承我这个类,必须先能看到我这个类。 如果你看不到我这个类,那还继承什么阿???

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值