访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关。
代码是需要反复重写多次的,我们总能发现有更好的方法去实现相同的功能。这正是重构的原动力之一。
但是,修改和完善代码也是存在压力的。通常,一些消费者(客户端程序员)需要你的代码在某些方面不变,而你却想改变代码。这就产生了面向对象设计中需要考虑的一个基本问题:“如何把变动的事物与保持不变的事物区分开来”。
这对类库而言尤为重要。我们需要做到,即使该类库的消费者知道如果类库出现了新版本,他们也不需要改写代码。
为了解决这个问题,Java提出了访问权限修饰符,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的。
不过,构建类库的概念以及对于谁有权用该类库构件的控制问题都还是不完善的。其中,仍然存在着如何将构建捆绑到一个内聚的类库单元的问题。对于这一点,Java用关键字package加以控制,而访问权限修饰符会因类是存在于一个相同的包,还是存在于一个单独的包而受到影响。

6.1 包:库单元

包内包含有一组类,他们在单一的名字空间下被组织在一起。包名是一个管理名字空间的机制,所有类成员的名字都是彼此隔离的。Java对名称空间进行完全控制,为每个名称空间(包)下的类创建唯一表示的名字。
当编写一个Java源代码文件时,此文件通常被称为编译单元(xxx.java)。*编译单元内只能有一个public类(类名称与文件名称相同),否则编译器就会不接受。*如果该编译单元之中有其他额外的类,那么在包之外的师姐是无法看到这些类的,因为它们不是public。
6.1.1 代码组织
身为一名类库设计员,很有必要牢记:package和import关键字允许你做的,是将单一的全局名字空间分隔开,使得无论多少人使用Internet以及Java开始编写类,都不会出现名称冲突问题。
6.1.2 创建独一无二的包名
java解释器的运行过程如下:首先,找出环境变量CLASSPATH。CLASSPATH包含一个或者多个目录,用作查找.class文件的根目录。从根目录开始,解释器获取包的名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径名称(于是,package foo.bar.baz就变成了foo\bar\baz或其他,这一切取决于操作系统)。得到的路径会与CLASSPATH中的各项相连接。解释器在这些目录中查找与你所要创建的类名称相关的.class文件。

6.2 Java访问权限修饰符

Java修饰符
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)public : 对所有类可见。使用对象:类、接口、变量、方法protected : 对同一包内的类和**所有子类**可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

自己的知识盲区:1、access.dessert和access不算在同一个包下。
比如下面这个例子:

package access;import access.dessert.Cookie;public class ChocolateChip extends Cookie {public ChocolateChip() {System.out.println("ChocolateChip constructor");}public void chomp() {//bite(); //这里会报错}public static void main(String[] args) {ChocolateChip x = new ChocolateChip();x.chomp();}
}
package access.dessert;public class Cookie {public Cookie() {System.out.println("cookie constructor");}void bite() {System.out.println("bite");}
}

首先,一个包内不允许出现同名的现象。其次,因为Cookie.java中bite()有包访问权限而它位于另外一个包内,所以报错。这里,假如我们给bite()方法加上protected修饰,就不会报错了。
2、关键词protected处理的是继承的概念。
protected : 对同一包内的类和所有子类可见。

6.3 接口与实现

访问权限的控制常被称为是具体实现的隐藏。把数据和方法包装进类中,以及具体实现的隐藏,常共同被称作是封装。其结果是一个带有特征和行为的数据类型。

6.4 类的访问权限

类不可以是private或protected。对于类而言,只能是包访问权限或public。

《Java编程思想》 第6章 访问权限控制相关推荐

  1. 第6章 访问权限控制

    2014-12-09 20:14:52 访问权限控制 1.访问权限控制出现的原因 代码需要不断的重新创作才能变得完善. 要完善的公用代码(如:类库)已经被客户程序使用,修改后,可能会影响客户程序的功能 ...

  2. java学习笔记 java编程思想 第6章 访问权限控制

    文章目录 6.1 包:库单元(the library unit) 6.1.1 代码组织 6.1.2 创建独一无二的包名 练习1 练习2 6.1.3 定制工具类 6.1.4 用import改变行为 练习 ...

  3. 关于访问权限控制问题

    实际上Java中是有访问权限控制的,就是我们个人的隐私的一样,我不允许别人随便来查看我们的隐私,只有我们自己同意的情况下,才能告诉别人我们的名字.年龄等隐私信息. 所以说Java中引入了访问权限控制( ...

  4. Java访问权限控制

    面向对象的核心思想之一就是封装,只把有限的方法和成员公开给别人,这也是迪米特法则的内在要求,是外部调用方对方法体内的实现细节知道得尽可能少. 如何实现封装呢? 需要使用某些关键字来限制外部对类内属性和 ...

  5. C++知识点11——this指针,const成员函数,访问权限控制

    1.this指针 每个类都有this指针,this指针指向this指针指向的是类的对象本身 class A { public:A() {}~A() {}void func() {cout<< ...

  6. android 静态方法 构造方法,android基础-Java篇02:类和对象、构造方法、访问权限控制、重载、this关键字、static关键字...

    一.类和构造方法 (类和对象在百度百科已经有详细的介绍,这里只做简单的描述以及帮助理解:百度百科:类和对象,需要注意的是,百度百科类和对象的举例中都是C++,书写格式不要和Java混淆!) 什么是类? ...

  7. 文件服务器共享文件夹访问权限,5对文件服务器中的共享文件夹进行访问权限控制...

    对文件服务器中的共享文件夹进行访问权限控制 1. 实训目的 在Windows Server 2003环境下设置文件服务器的目的是要对多用户进行资源共享,这其中经常遇到不同用户应该分配不同权限的问题,通 ...

  8. [THINKING IN JAVA]访问权限控制

    6 访问权限控制 6.1 包:库单元 package.import.import *.import static: 修改classpath环境变量可以将自己写的类库添加至环境变量并在任何java程序中 ...

  9. Java成员的访问权限控制

    Java中的访问权限控制包含两个部分: 类的访问权限控制 类成员的访问权限控制 对类来说,访问权限控制修饰符可以是public或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以 ...

  10. java权限控制是什么_Java访问权限控制的重要性深入讲解

    前言 人在什么面前最容易失去抵抗力? 美色,算是一个,比如说西施的贡献薄就是忍辱负重.以身报国.助越灭吴:金钱,算是另外一个,我们古人常说"钱乃身外之物,生不带来死不带去",但我们 ...

最新文章

  1. 使用 HTML5 时如何改进移动 Web 应用开发
  2. YYAsyncLayer 学习
  3. iOS物理碰撞、唱吧音频处理、仿淘宝联动效果等源码
  4. mysql 表丢失_Mysql数据库备份 部分数据表丢失 Mysql table doesn't exist 解决
  5. 开发模式下浏览器不支持ES6
  6. kali linux 截图 软件,Kali-Linux-Tools-Interface:针对Kali Linux的图形化Web接口
  7. 表变量和临时表的使用
  8. 摄影测量--点位精度评定
  9. Numpy Scalars(标量)
  10. [PetShop]园子里petshop的几篇文章,先来个了解吧
  11. mysql清理死链接_对MySQL的死连接Sleep的进程的来源研究
  12. 实力封装:Unity打包AssetBundle(四)
  13. 慎用某60软件清理垃圾,导致三星SSD T5不识别了,折腾了一下午,终于弄好了
  14. 【AD封装】电感(带3D)
  15. 单片机c语言与汇编语言转换,浅谈单片机中C语言与汇编语言的转换
  16. 运维技术相关基础面试
  17. 基于bing 搜索引擎和 Microsoft Academic Search 的高校申请指南的NABC分析
  18. CVPR 2022 | 阿里华科提出:针对场景文本检测的视觉语言模型预训练
  19. 光猫路由器与交换机的连接方式
  20. 学习CSS3,使用双旋转实现福到了的迎春喜庆特效

热门文章

  1. PostgreSQL表增加一列或删除一列
  2. 计算机动态评估英语阅读,动态评价理论的国内外研究简述
  3. 会议选座位php,会议室座次(会议座位怎么排位)
  4. swiper禁止手动滑动
  5. 华为云教程(云数据库RDS)
  6. 关于虚拟机复制文件时:无法确定本地文件类型。您可能没有执行此操作的权限。 正在取消文件复制操作。的决解方法
  7. photoshop-photoshop记录
  8. SAT数学解题方法总结
  9. Word粘贴时出现“文件未找到:MathPage.WLL”的解决方案
  10. 安恒月赛-dasctf 部分writeup