访问权限控制

一.编译单元

1-1 概念

一个Java源代码文件通常被称为一个编译单元,每个编译单元的后缀需是.java,并且每个编译单元中最多只能有1个public类(当然,可以为0个)。

1-2 编译 编译单元

当编译一个编译单元(.java文件)时,在编译单元中的 每个类都会有一个后缀名为.class的输出文件。

例:

class Pen{}

class Book{}

public class Box {
}

访问权限控制

编译后生成的文件为:

1-3 import语句

当编译器碰到import语句时,就会在CLASSPATH所指定的目录中查找import关键字后的目录或者文件,然后从已经编译的文件中找出名称相符者。

二.Java访问权限修饰词

Java权限可分为public>protected>default(包访问权限)>private;

如上顺序靠前的权限修饰词拥有顺序在其后权限修饰词的特性。如,protected>default(包访问权限)表明:用protected修饰的方法(属性等)也相当于被default修饰。即,用protected修饰的方法除了能被其本类和其子类访问到外,也能被在其同一个包中的其他类访问到。

2-1 public访问权限

使用关键字public,意味着public之后紧跟着的成员,对每个类来说都是可以去访问的。

2-2 protected访问权限

使用关键字protected,意味着protected之后紧跟着的成员,只有继承了包含该成员的类的子类才可以访问。

2-3 包访问权限

  • 默认访问权限不使用任何权限修饰词,通常是指包访问权限。
  • 一个编译单元只能隶属于一个包,这个包是离它最近的包。

如上图中的MyClass编译单元,只能说它属于包c,而不能说它也属于包b或包a。

  • 将一个类的某个成员的访问权限设置为包访问权限,这意味着该类所在包中的所有类都可以访问到该成员,而其他所有包中的所有类都访问不到该成员。这句话可简单理解为:只有包路径一致的类之间才可以互相访问对方的具有包访问权限的成员。这也同样适用于在同一个编译单元中的类,因为他们的包路径是一致的。

如上图有A,B,B1,C4个类,他们的包路径分别为:
类名

包路径

A com.test.a B com.test.a.b B1 com.test.a.b C com.test.a.b.c

对于类B来说,他能访问的具有包访问权限的成员,只有其本身和与其包路径相同的类B1的。b包内的c包和在b包外的a包中的类的具有包访问权限的成员都不能被B类访问到。

public class A {
    static String name = "class A";
}

public class B {
    static String name = "class B";

    public static void main(String[] args) {
        System.out.println(A.name);
        System.out.println(B1.name);
        System.out.println(C.name);
    }
}

public class B1 {
    static String name = "class B1";
}

public class B {
    static String name = "class B";

    public static void main(String[] args) {
        System.out.println(A.name);//访问不到
        System.out.println(B.name);
        System.out.println(B1.name);
        System.out.println(C.name);//访问不到
    }
}

public class C {
    static String name = "class C";
}

2-4 private访问权限

使用关键字private,意味着private之后紧跟着的成员,除了包含该成员的类之外,其他任何类都无法访问这个成员。

三.类的访问权限

  • 在Java中,访问权限修饰词也可用于修饰类。如果希望某个类可以被所有类使用,就可以通过关键字public作用于整个类的定义来达到目的;如果希望一个类只能在一个包的范围内使用,那么可用通过在类定义前不加任何权限关键字在(包访问权限)来实现。
  • 除内部类之外的其他类的访问权限只有public和包访问权限两个选择。
  • 每个编译单元至多只能有一个用public修饰的类,且这个public类的名字必须与包含该类的编译单元的名字完全匹配,包括大小写。

Original: https://www.cnblogs.com/certainTao/p/14637534.html
Author: certainTao
Title: 访问权限控制

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585285/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 双绞线

    双绞线简介 双绞线(twisted pair,TP)是一种综合布线工程中最常用的传输介质,双绞线一般由两根22~26号绝缘铜导线相互缠绕而成,在一个电缆套管里的,不同线对具有不同的…

    Linux 2023年6月7日
    086
  • python学习

    目录: 1、课程推荐以及书籍推荐 2、学习记录 2.1:无 1. 实践过程 廖雪峰的官方网站 2. 学习记录 2.1 无: posted @2022-02-12 19:44 风御之…

    Linux 2023年6月13日
    0107
  • jenkins使用ssh remote插件执行shell后无法退出的问题处理

    现象:通过jenkins发布代码后,执行远程命令,一直卡在执行远程命令那里打转,无法退出 脚本 #!/bin/bash 根据参数,执行进程的启动 停止 重启等 #source /e…

    Linux 2023年5月28日
    098
  • 网络协议及tcp协议详解

    说说TCP三次握手的过程? 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Ser…

    Linux 2023年6月13日
    0100
  • Redis下载及安装(windows版)

    下载地址1、Github下载地址:https://github.com/MicrosoftArchive/redis/releases2、百度网盘下载地址 https://pan….

    Linux 2023年5月28日
    089
  • centos7安装zabbix-agent客户端

    1.官方下载zabbix-agent安装包链接:wget https://cdn.zabbix.com/zabbix/binaries/stable/5.4/5.4.6/zabbi…

    Linux 2023年6月13日
    0126
  • Redis下载及安装(windows版)

    Redis下载及安装(windows版) 下载地址1、Github下载地址:https://github.com/MicrosoftArchive/redis/releases2、…

    Linux 2023年5月28日
    091
  • Android recovery支持adb shell

    Android recovery支持adb shell 近期开发过程注意到recovery不支持adb shell。为了便于调试方便,决定添加此功能。 刚開始我们採用的是user版…

    Linux 2023年5月28日
    0102
  • linux 应用程序直接读写寄存器或物理内存

    1.程序说明: 调试驱动程序时,经常遇到候需要查看或设置寄存器的情况,但是直接更改内核代码又不方便。 这里提供一个应用程序源码能在应用层访问底层寄存器。(网上找到的,进行过更改)。…

    Linux 2023年6月6日
    0194
  • Jenkins中HTML报告无法正常显示问题解决

    自动化结果生成了HTML报告,但是在Jenkins中打开报告却显示空白,打开控制台,可以看到该报错 参考https://www.jenkins.io/doc/book/securi…

    Linux 2023年6月6日
    0110
  • 【论文笔记】(2015,JSMA)The Limitations of Deep Learning in Adversarial Settings

    本文是早期的对抗文章,发表于 EuroS&P 2016会议,最主要的工作是:提出了一个生成对抗样本的算法– JSMA(Jacobian Saliency Map…

    Linux 2023年6月7日
    094
  • 软件定义网络第一次作业

    配置结果 如何pip解决下载过慢问题 实验环境配置 环境安装截图如下 安装环境过程中一些问题的解决 github连接不上 在hosts文件中加上以下语句 140.82.114.3 …

    Linux 2023年6月7日
    0112
  • 假如,程序员面试的时候说真话

    做程序员这么长时间了,经常能够听到一句话:面试造火箭,入职拧螺丝。而且,随着就业环境越来越卷,现在只会造火箭恐怕都不行了,得能造个空间站才行。 回想自己刚毕业那会儿,哪有什么八股文…

    Linux 2023年6月7日
    080
  • Redis 用的很溜,了解过它用的什么协议吗?

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白…

    Linux 2023年5月28日
    0114
  • 表单校验

    HTML <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Typ…

    Linux 2023年6月13日
    0103
  • springBoot2.*使用redis集群/单机方法

    Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server。 Jedis在实现上是直接连接的redis server,如果…

    Linux 2023年5月28日
    0119
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球