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 × × × × ×

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

  • 相关阅读:
    0309. Best Time to Buy and Sell Stock with Cooldown (M)
    0621. Task Scheduler (M)
    0106. Construct Binary Tree from Inorder and Postorder Traversal (M)
    0258. Add Digits (E)
    0154. Find Minimum in Rotated Sorted Array II (H)
    0797. All Paths From Source to Target (M)
    0260. Single Number III (M)
    0072. Edit Distance (H)
    0103. Binary Tree Zigzag Level Order Traversal (M)
    0312. Burst Balloons (H)
  • 原文地址:https://www.cnblogs.com/Pikzas/p/11210542.html
Copyright © 2011-2022 走看看