• java类的访问权限


    java中,

    类的权限有两种:

    • 包访问权限
    • public

    数据成员的权限有四种:

    • public
    • protected
    • default(缺省)
    • private

    注意,类的权限不可以是private(这会使得除了该类外,其他任何类都不可以访问它),也不可以是protected

    一、类的权限

    在说类之前,先明确一下编译单元的概念,一个java源文件就算作一个编译单元

    访问权限 < public权限。拥有包访问权限的类,对同一个包内的其他类,可以看做表现为"public",
    而对包外部的类,则可以看做表现为"private"。

    包访问权限

    在写了一个java源文件后,可以在它的开头加上package <包名>来将它划分到指定包。
    如果不指定,那么它就划分为默认包,可以认为它的包名为"",也即是空。

    在创建一个类后,如果不加访问控制符,那么这个类就拥有包访问权限。
    拥有包访问权限的类,能被同一个包内的其他类访问,但不能被包外部的代码访问。

    不指定包名,则源文件属于默认包(即不指定包名),且是当前目录的默认包。位于相同目录的源文件,如果不指定包名,则属于同一目录的默认包,默认包为同目录的所有其他文件提供了包访问权限。

    举个例子:

    //Animal.java
    package com;
    class Animal{
        public Animal(){
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这里的Animal类所在文件指定了包名com,所以它属于包com
    它的class前没有权限控制符,所以它拥有包访问权限。
    此时如果com中有另一个类Dog

    //Dog.java
    package com;
    class Dog{
        Animal dog;
        public Dog(){
            dog = new Animal();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    那么它可以访问到这个类,因为Animal有包访问权限。

    public

    继续上面的例子,如果有另一个类不在com中,如:package net,那么这个类中无法访问到Animal

    如果想要访问,则需要在class Animal前加上public,此时Animal不再局限于包访问权限,它既可以被包内的其他类访问,也可以被外部的类访问。

    二、数据成员权限

    • public
      • 所有类(同包的其他类、外部的类)都可访问。
    • protected
      • 继承类(extends)可以访问,但是其他类不能访问。
    • 包访问权限(什么都不写)
      • 类自己和同包的类可以访问。
    • private
      • 只有该类自己可以访问,其他类(包括同包的其他类)都不可以。

    三、补充

    • 一个java源文件只能有一个public类,可以有多个拥有包访问权限的类。
    • public类的名字必须与源文件名前缀相同,大小写也要一样,否则会编译出错。
      • 如:public class LittleDog,则源文件必须为LittleDog.java
    • 包名一般全部都小写。
    • 包名必须与其放置的系统的目录(文件夹)对应,否则使用时会运行时报错:找不到类(哪怕这个类就在相同的目录下)。
      • 如一个源文件指定了package com.dog;,则它必须位于com/dog/的路径下。
      • 检验是否是由于路径放置错误的一个方法是将package xxx;去掉再运行,如果可以运行,那么说明是 包名和目录路径不对应 导致的错误。

    四、总结

    在查看一个权限时:

    • 首先看类的权限,判断是否对包外部可见:
      • 若为public,则外部可以访问;
        • 再看类内数据成员的访问控制符,
          • public
            • 所有人都能访问
          • protected
            • 继承类可访问。
          • 包访问权限
            • 类自己和同包的类可以访问。
          • private
            • 只有该类能访问。
      • 否则不能,结束判断。

    在这里插入图片描述

    参考书籍:

    • [1] Eckel B. Thinking in Java[M]. 4. 机械工业出版社, 2018年1月 :109,124.
  • 相关阅读:
    Vue --- router,params和query传递参数并接收
    左神高级提升班1 很重要的题目
    Backblaze发布2023中期SSD故障数据质量报告
    计算机组成原理——中央处理器の选择题整理
    Springboot整合shiro
    Android系统内置应用
    数据分析软件的使用
    shopee马来西亚和菲律宾站哪个好做?做shopee跨境如何选择站点?
    二叉搜索树--详细实现过程
    MySQL概览
  • 原文地址:https://blog.csdn.net/qq_51470638/article/details/127760317