zoukankan      html  css  js  c++  java
  • Java基础—访问权限控制

    Java中访问权限控制的作用:

    1. 为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分。
    2. 为了让类库设计者可用更改类的内部工作方式,而不必担心会对用户造成重大影响。

    包(package)

    Java中包(package)的概念和C++中命名空间(namespace)的概念很类似,都可以限制类的作用域。二者最大的差别在于,Java中的包隐式地指明了类的树形层级结构(同时也是Java源码文件的目录结构)。这样做的好处在于:可以通过文件系统中对于文件路径唯一性的要求来限制类的唯一性。

    代码组织

    • 编写一个Java源代码文件(.java文件)时,此文件通常被称为编译单元。在编译单元内最多允许有一个public类,且该类的名称必须与文件名完全相同(包括大小写)。
    • 编译一个.java文件时,在.java文件中的每个类都会有一个.class输出文件,这个文件名和类名是相同的。Java可运行程序是一组可以打包并压缩为一个Java文档文件(JAR包,使用Java的jar文档生成器)的.class文件。Java解释器负责这些文件的查找、装载和解释。
    • 类库实际上是一组类文件。其中每个.java文件最多允许有一个public类,以及任意数量的非public类。因此,每个文件都有一个构件。如果要将这些构件(每个构建有一个.java文件和若干个.class文件)组织起来,形成不同的群组,可以使用Java中的关键字package

    包(package)的作用

    1. 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
    2. 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
    3.  包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

    创建包

    Java中,使用package关键字来指定代码所属的包(命名空间)。

    语法格式:

    package pkg1[.pkg2[.pkg3…]];

    注意点:

    1. 包的名字隐含地指出了代码的目录结构。
    2. 同一目录下的public类名(同时也是java文件名)应该是独一无二的。
    3. 包声明应该在源文件的第一行,每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。
    4. 如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中。
    5. package的名字一般全是小写字母。

    例如:

    查看java.util.ArrayList类的源码可以看到文件第一行代码为:

    package java.util;

    它的代码目录结构就是java/util/ArrayList.java

    导入包

    Java中,使用import关键字来导入包。

    语法格式:

    import package1[.package2…].(classname|*);

    例:

    还是以java.util.ArrayList来举例。如果以一个类完整路径的方式来使用它,十分不方便。

    java.util.ArrayList<String> list = new java.util.ArrayList<String>();

    如果想要省略前面的路径,可以使用import关键字。

    import java.util.ArrayList;

    文件中使用了import导入包后,前面的声明list的代码就可以简化如下:

    ArrayList<String> list = new ArrayList<String>();

    访问控制修饰符

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

    访问控制修饰符
    修饰符当前类同一包内子孙类其他包
    public Y Y Y Y
    protected Y Y Y N
    default Y Y N N
    private Y N N N

     

    访问控制和继承

    子类重写父类的方法的访问修饰符,不能低于父类的方法访问权限,请注意以下方法继承的规则:

    • 父类中声明为 public 的方法在子类中也必须为 public。

    • 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。

    • 父类中声明为 private 的方法,不能够被继承。

    参考

    Java中的访问控制权限

    Java修饰符

  • 相关阅读:
    Java 集合 — ArrayList
    Java 线程 — ScheduledThreadPoolExecutor
    Java 线程 — ThreadPoolExecutor
    Java 线程 — ThreadLocal
    Java 线程 — ConcurrentLinkedQueue
    Java 线程 — ConcurrentHashMap
    Java 线程 — AbstractQueuedSynchronizer
    Java 线程 — JMM Java内存模型
    Java 线程 — synchronized、volatile、锁
    spring源码 — 三、AOP代理生成
  • 原文地址:https://www.cnblogs.com/Jason-Xiang/p/6774481.html
Copyright © 2011-2022 走看看