• Java编程思想 学习笔记6


    六、访问权限控制

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

    如何把变动的事物与保持不变的事物区分开来,这是面向对象设计中的一个基本问题。

    为了解决这一问题,Java提供了访问权限修饰词,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的。访问权限的等级,从最大权限到最小权限依次为:public、protetced、包访问权限(没有关键词)和private

    1.包:库单元

      包内包含有一组类,它们在单一的名字空间之下被组织在了一起。

      当编写一个Java源代码文件时,此文件通常被称为编译单元,每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同。每个编译单元只能有一个public类,否则编译器就不会接受。

      ①代码组织

      当编译一个.java文件时,在.java文件中的每个类都会有一个输出文件,而该输出文件的名称与.java文件中每个类的名称相同,只是多了一个后缀名.class

      Java可运行程序是一组可以打包并压缩为一个Java文档文件(JAR)的.class文件。Java解释器负责这些文件的查找、装载和解释。

      类库实际上是一组文件。其中每个文件都有一个public类,以及任意数量的非public类。因此每个文件都有一个构件。如果希望这些构件从属于一个群组,就可以使用关键字package

      如果使用package语句,它必须是文件中除注释以外的第一句程序代码。

      ②创建独一无二的包名

      package名称的第一部分是类的创建者的反顺序的Internet域名。第二部分是将package名称分解为你机器上的一个目录。所以当Java程序运行并且需要加载.class文件时,它可以确定.class文件在目录上所处的位置。

      Java解释器的运行过程如下:首先,找出环境变量CLASSPATH。CLASSPATH包含一个或多个目录,用作查找.class文件的根目录。从根目录开始,解释器获取包的名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径名称。得到的路径会与CLASSPATH中的各个不同的项相连接,解释器就在这些目录中查找与你所要创建的类的名称相关的.class文件。

    2.Java访问权限修饰词

      ①包访问权限

      如果不提供访问权限修饰词,则意味着它是“包访问权限”。这就意味着当前的包中的所有其他类对那个成员都有访问权限,但对于这个包之外的类,这个成员却是private的。  

      ②public:接口访问权限

      使用public,就意味着public之后紧跟着的成员声明自己对每个人都是可用的。

      ③private:你无法访问

      关键字private的意思是,除了包含该成员的类之外,其他任何类都无法访问这个成员。

      ④protected:继承访问权限

      关键字protected处理的是继承的概念。基类的所有派生类都可以访问protected成员,此外,proteced也提供包访问权限。

    3.接口和实现

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

    4.类的访问权限 

      如果希望某个类可以为某个客户端程序员所用,就可以通过把关键字public作用于整个类的定义。

      注意:每个编译单元都只能有一个public类。

      类既不可以是private的,也不可以是protected的。如果不希望其他任何人对该类拥有访问权限,可以把所有的构造器都指定为private,从而阻止任何人创建该类的对象,但是有一个例外,就是你在该类的static成员内部可以创建。

    5.总结 

      对于Java,关键字package、包的命名和关键字import,可以使你对名称进行完全的控制,因此名称冲突的问题是很容易避免的。

      控制对成员的访问权限有两个原因。第一是为了使用户不要触碰那些他们不该碰的部分。第二个原因,也是最重要的原因,是为了让类库设计者可以更改类的内部工作方式,而不必担心这样会对客户端程序员产生重大的影响。

  • 相关阅读:
    Eclipse_断点设置不起作用
    JAVA基础_自定义泛型
    JAVA基础_泛型
    JAVA工具包_BeanUtils
    JAVA_ArrayList和HashSet
    JAVA基础_反射获取泛型参数类型
    Caused by: java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Properties;
    MySQL Connector/J 6.x jdbc.properties 配置, mysql-connector-java-6.0.4.jar 异常
    【ES】Head插件操作ElasticSearch增删改查(转载记录)
    elasticsearch使用head插件查询及删除索引(首次使用记录)
  • 原文地址:https://www.cnblogs.com/fht-litost/p/8372193.html
Copyright © 2020-2023  润新知