zoukankan      html  css  js  c++  java
  • 第6章-访问权限控制

    1.什么是访问权限控制

    都知道JAVA应用是由多个不同的类相互配合调用来实现一系列功能的,那我现在有类A,类B两个类,其中类B有很多方法和属性,通过对类B及其方法和属性设置不同的关键字,使得类A只能使用类B中特定关键字修饰的方法和属性,这就是访问权限控制

    2.如何实现访问权限控制

    想要知道如何实现权限控制,要知道一些概念:编译单元和一些特殊关键字public private protected等。

    2.1. 什么是编译单元

    都知道JAVA代码都是.java这样格式的文件,经过javac编译之后才能编程成.class这种机器可以识别的机器码。这样的一个*.java文件就是一个编译单元。

    2.2. 编译单元的特点

    1. 一个编译单元至多只能一个class是public的(也可以一个都没有),且这个public的class必须和文件完全同名,大小写都要保持一致。
    2. 一个编译单元可以有数量不受限的默认(不带任何修饰符)的class,用来为这个编译单元中的public那个class提供支持。

    假设存在一个Demo.java文件,里面写的代码可以有这几种场景。

    1. 仅有一个public的class。
    public class Demo{}
    
    1. 还拥有不带修饰符的class。
    public class Demo{}
    class Helper{}
    class Utils{}
    
    1. 只有不带修饰符的class(一般用不到,此时对文件名不做要求)。
    class Helper{}
    class Utils{}
    

    3.类上不同的修饰符对访问权限影响

    2.2列出了所有可能的加在class前的修饰符,要么是public的,要么是默认啥也没有,他们之间的区别在于。

    1. public修饰的类,那里都能访问。
    2. 默认啥也不带的,也成为包访问权限,只能是在处于同一个包下的类才能访问这个类。

    如果啥也不带,那么如果这个类位于com.pikzas包下,其他处于相同路径下的类中可以访问那些不带修饰符的class,可以new Helper();而且能够正确的编译,但是如果一个类位于com.alex或者com或者com.pikzas.inner这些路径下,则在这些类中new Helper();这样的操作会提示编译错误,因为此时不具有访问权限。

    4.属性和方法上不同的修饰符对访问权限的影响

    4.0.访问权限范围由小到大分别是

    只能自己这个类中使用 < 同一个包类路径下、不同的类中可以使用 < 任意位置的任意类中都可以使用

    分别对应的关键字是 private、default、public

    4.1.public 修饰的属性或者方法,只要能访问到这个类,那么这个方法或者属性都可以访问

    4.2.private 修饰的属性或者方法,只有这个类自己才能访问(就算是在同一个编译单元内的不同class内也不能访问)

    4.3.default 默认包访问权限 就是什么关键字也没有加 修饰的属性或者方法,只要是与当前类位于同包类路径下,都具有访问权限。

    4.4.protected 这个关键字的出现主要是为了解决继承带来的访问权限问题,想要让子类有权限访问(private只能父类自己访问),但不想让所有人都能访问(public所有人都能访问)。父类中protected修饰的属性或者方法对于子类是可见的,同时兼具protected的特性(同包类路径下的其他类也可以访问)

    4.5.访问关系图

    关键字 类内部 同编译单元内部其他类 同包类路径下的子类 不同包类路径下的子类 同包类路径下其他类(包含同编译单元不同类) 不同包类路径下的类
    public
    protected ×
    default × ×
    private × × × × ×

    将属性和方法包装进类里,同时对访问权限做约束的过程称为封装。

  • 相关阅读:
    【HDOJ6666】Quailty and CCPC(模拟)
    【2019 Multi-University Training Contest 8】
    分布式锁的理解
    反射工具类【ReflectionUtils】
    Maven常用命令
    maven常用命令介绍
    mysql 优化策略(如何利用好索引)
    centos7搭建svn服务器及客户端设置
    Centos7 配置subversion
    Centos7更改网卡名称Eth0
  • 原文地址:https://www.cnblogs.com/Pikzas/p/11210542.html
Copyright © 2011-2022 走看看