美文网首页
第六章 访问权限控制

第六章 访问权限控制

作者: WandaGao | 来源:发表于2018-07-13 18:17 被阅读0次

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

如何理解:

1.不可能一次性编写出完美的代码  需要反复的修改 重构,这样才能写出更易理解更具维护性的代码

2.我们的代码在被他人使用时,他人希望我们的代码永远不要改动,保持原状最好

综上 所有我们就需要将代码中不变的与变的分离开来   使使用者不必因为创造者的改动而改变代码

解决 约定

开发者承诺不删除 使用者所使用的的任何方法 进行项目升级  

问题:开发者并不知道哪些域(数据成员) 哪些 对象被 使用者所使用 ,如果对这些域,数据成员进行删减或者修改,并不能评估所造成的影响,如果开发者对某个方法的实现也并不满意,如果想要修改或者删除,那将造成更多问题,这就造成 开发者难以迭代代码

限制:访问权限修饰词,用来限制使用者对类的使用,将高度危险的代码隐藏起来 易于后期维护

访问全向依次为:public    protected   包访问权限  private

6.1 包  : 库单元

包内包含有一组类,他们在单一的名字空间只下被组织在一起

不同包内的类无法直接引用,除非使用import进行导入或者将类全名指定

java.util.ArrayList  list = new java.util.ArrayList( )  //看起来是相当的繁琐 会造成代码的臃肿

所以尽量用 import

java的导入机制也名字空间的管理机制,通过对命名空间进行控制为每一个类创建唯一的标识符组合可以避免类名冲突

java  文件  被称为编译单位   每个.java文件中只允许有一个public 类 且类名与文件名一致

这是不行的 但是把 public去掉就没问题了

6.1.1 代码组织

A.java 编译后后生成一个 A.class 文件

package 语句用来 标识类所出的组(包)  必须放在类的最上面(除注释外)

6.1.2 创建独一无二的包名

不介绍了 我直接进入 权限修饰词

6.2 java访问权限修饰词

public  protected  private   使用:置于类中每个成员定义之前 无论是一个域还是一个方法   如果不提供任何权限,就意味着是包访问权限

6.2.1 包访问权限

默认访问权限  同一包内的类才能够访问该修饰词的修饰的 成员或者域,其他包内的类没有权限访问

作用:将包内所有类组织起来 让他们可以彼此访问

类控制着那些代码有权访问自己的成员。其他包内的类不能直接对类中 protected private 以及默认权限下的成员或域进行访问 

访问的唯一途径就是:

1.使该成员成为 public 

2.类中不添加权限修饰词(即使用默认权限修饰词),将访问类放入同一包中,通过包权限来访问

3. 使用继承技术,可以访问到类的public protected 修饰的成员  但不能访问 private修饰的成员 ,另外在同一包内才能访问 包权限修饰成员

4.提供构造器和变异器方法,即getter setter 方法来获取想要访问的成员    get set 的必要性: 可以方便类的创建者任意修改 

限制权限下的成员 包括成员名 成员返回值 成员返的方式   这些修改并不会被使用者所察觉 因为他无需修改代码

private  int k                                                                     

public int getK(){       原来      -------》修改后                  public int getK(){                

     return k;                                                                              return  countK(k);                           

}                                                                                                    // return   i ; 甚至可以返回 其他变量值  

                                                                                                     // return   K2 ;  可以任意修改k的标识符

                                                                                                 }

6.2.2 public:接口访问权限

使用public关键字,意为着public之后声明的成员可以被任何人可用  尤其对客户端程序猿更是如此

6.2.3 private:你无法访问

关键字private 意味着 除了包含该成员的类外,其他任何类都无法访问成员。

private 将自己封闭在类内  允许你随意改变 而不用考虑对其他类的影响 这样很棒对于类的创建者来说很有利

最常见的单例模式 : 类的创建者不希望使用者 自己随意创建对象 将构建器使用private 修饰

6.2.4 protected : 继承访问权限

这里需要注意的是 protected 提供包继承权限  即在同一个包内的类 可以使用 protected修饰的成员变量

继承访问权限 继承可用 

这里需要注意 A包内的类 继承B包中的 类,B包中  基类public 修饰的成员 A中子类是可以使用的,其次就是protected修饰的成员是可使用的  不受包权限的限制

我们来看一个结构:(基类与子类不同包...很少见 基本是要在同一个包中的)

方法在哪个包中被包访问权限限制,对象就只能在那个包内调用它,其他包调用会报错

所以我们要理解protected具有包访问权限 同时包访问权限修饰的方法 到底是正在那个包内 当Nigt在simpletoolbar时,dof()是在该包内使用 才有效,NigtSon继承了Nigt拥有在class内使用该类的权利了,但是由于基类不在A包中,所以NigtSon的对象如果在B包中调用 dof()是不成立的  

6.3 接口和实现

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

封装的结果就是 使我们获得了一个带有特征和行为的数据类型(类)

访问权限控制 将权限控制的边界划在了数据类型(类)的内部 原因在于:

1.设定 客户端程序猿可以使用和不可使用的边界,不用担心客户端程序猿会将数据类型中的内部实现当做接口的一部分进行调用

2.接口与具体实现进行分离  客户端程序猿可以向接口发送消息(调用public 修饰的成员或域)除此之外什么也不能使用,那么对于创建端程序猿来说,实现是可以进行修改有跌代的,而不会破坏客户端程序猿的代码

这里作者介绍了一种类创建方式与阅读方式 权限递减

先把public修饰的成员变量放在上面 之后是 protected  默认权限(包访问权限) private 

当客户端程序猿看到 private时即可停止阅读或者跳跃阅读

6.4 类的访问权限

java 中访问权限修饰词也可用来修饰 class   用来控制客户端程序猿是否可以创建该类的对象

不限制可以使用public 在class前进行修饰

额外限制:

1.每个编译单元都只能有一个public 类。意味着,每个编译单元都有单一的公共接口,用public类来表示。该接口可以按要求包含众多的支持包访问权限的类。

这样

2.public类的名称必须与含有该编译单元的文件名称相匹配,包括大小写

例如这样

3.虽然不常用,但是编译单元(.java文件)中,可以不含public 类,此时类名可以与编译单元文件名不相符,很容易造成别人的混淆

例如这样

类不能使private 或者 protected    只能是public 或者 默认权限修饰(包访问权限修饰)

权限修饰符可以控制对象的创建 但是不能控制 static public 成员的调用

相关文章

  • Java编程思想(第四版)学习笔记(7)

    第六章 访问权限控制 1.访问权限控制的等级 从最大权限到最小权限依次为:public、protected、包访问...

  • Java基础学习六 关键字

    java语言中的访问控制权限修饰符 访问控制权限修饰来控制元素的访问范围。 访问控制权限修饰符包括:public ...

  • 进阶:访问控制权限

    访问控制权限 访问控制权限:private、protected、public、 默认。 private:私有的只...

  • 2017-09-07学习记录

    今天学习了第六七章的内容,还看了第九章接口的一些内容;下面是所有的内容: 第六章:访问权限控制 访问权限主要是类程...

  • 《JAVA编程思想》学习笔记:第6章(访问权限)

    第六章、访问权限控制 6.1 Java解释器的运行过程: 首先,找出环境变量CLASSPATH,用作查找.clas...

  • java权限控制

    浅析Java中的访问权限控制 今天我们来一起了解一下Java语言中的访问权限控制。在讨论访问权限控制之前,先来讨论...

  • 权限控制

    RBAC模式进行权限控制,即(Role-Based Access Control)基于角色的访问控制。实现权限访问...

  • 6、访问权限控制(封装)

    访问权限限制等级,从大到小依次为:public, protected, 包访问权限, private访问权限的控制...

  • Swift 访问控制 ⑭

    1. 访问控制权限 在访问权限控制这块,Swift提供了5个不同的访问控制级别(以下是从高到低排列,实体指被访问级...

  • Java访问控制符

    Java访问控制符的访问权限

网友评论

      本文标题:第六章 访问权限控制

      本文链接:https://www.haomeiwen.com/subject/zothpftx.html