• 了解public,protected,default以及private看完这一篇就足够!!!


    前言
    小鱼查阅了很多博客,很少有能将public,protected,default(默认不写)以及private讲解的很细节的,我指的细节是从访问权限到为什么我们的类只能被public修饰和default(默认不写)修饰。

    在这里插入图片描述



    访问级别修饰符确定其他类是否可以使用特定字段或调用特定方法,有两个级别的访问控制

    我们知道,在Java中,访问修饰符可以修饰 类、方法、变量和构造方法

    在顶级

    在顶级有两个修饰限定符,public和default(默认不写,编译器提供的)
    当我的类用public修饰时,我的类对所有类都可见,如果一个类没有写修饰限定符,那么就是系统默认的defaule,仅对自己的包中的类公开。

    public

    JAVA类声明中关键字public起到什么作用呢?如下Hello类的声明,按着字面的意思理解是:Hello类是公共的,要求Hello类与类文件名必须保持一致,并且一个java文件中只能有一个public关键字声明的类。
    在这里插入图片描述
    当我们的被public修饰的类型名和文件名一样时,是不会报错的,并且编译的时候会生成与文件名相同的class文件
    在这里插入图片描述
    如果文件名和类名不相同时,编译会出错,并且爆出java: 类HelloWOrd是公共的, 应在名为 HelloWOrd.java 的文件中声明
    在这里插入图片描述
    当pubilc修饰的类在其他包的文件中访问时
    在这里插入图片描述
    也是可以通过编译的,蓝色框框是他们所属的包

    总结:

    • 一个java文件中只能有一个时public修饰的类
    • 被public修饰的类名要与文件名一致
    • 编译后会产生一个与java文件名相应的.class文件
    • 所有类都可以访问

    default(没有显示修饰符即默认访问权限)

    我们的外部类也可以用default来修饰,当我们的文件名和我们的类名不一致时,

    Hello.java文件
    
    • 1
    class HelloWord {
        public static void main(String[] args) {
            System.out.println("Hello word!!!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    我们编译一下,没有报错,最后生成了一个HelloWord.class的文件
    在这里插入图片描述
    如果Hello.java中有多个非public关键字声明的类,就会产生多个与之相应的.class文件
    在这里插入图片描述
    当default(默认访问权限)修饰的类在其他包的文件中访问时
    在这里插入图片描述
    defaule只能在自己的包中访问,如果从别的包访问就会产生编译错误。
    总结:

    一个java文件中可以同时有多个不使用public关键字声明的类,但是编译后会产生多个与之对应的.class文件,并且要执行的文件是对应的多个.class的前缀名
    default的权限仅限于自己包内(包访问权限)

    只能用public和default修饰类嘛?

    • 是的,我们使用访问修饰符去修饰类,就是为了让类之间根据各种权限来访问。

    • 假如外部类使用private修饰,则不能被其它类所访问,这个类也就失去了意义。

    • 假如外部类使用protected修饰,看起来与default相比,在包内可访问的基础上,包外的子类也可访问。但包外想成为子类需要先继承父类,然而无法找到该父类实际上无法继承(先有鸡还是先有蛋的问题),效果与default一致,也就没必要存在了。

    在成员级别

    在成员级别中,可以使用public和default(默认访问权限),当然还新增了两个访问修饰符,privateprotected.
    private修饰的成员只可以在自己的类中访问,
    protected修饰的成员可以在自己的包中访问,也可以被其他包中的该类的子类访问

    如何选择访问级别

    如果其他程序员在使用你的类,你想要确保不会发生滥用错误,访问级别可以这么选择

    • 我们希望类要尽量做到 “封装”, 即隐藏内部实现细节, 只暴露出 必要 的信息给类的调用者.
    • 因此我们在使用的时候应该尽可能的使用 比较严格 的访问权限. 例如如果一个方法能用 private, 就尽量不要用 public.
    • 另外, 还有一种 简单粗暴 的做法: 将所有的字段设为 private, 将所有的方法设为 public. 不过这种方式属于是对访问权限的滥用。
    • 认真思考这个类是给自己使用还是给外部使用来决定它的访问权限。

    实际演示

    我们采取四个对比的方式

    我们被private修饰的成员变量在其它类中无法访问在这里插入图片描述
    在不同包中的子类和非子类里访问
    在这里插入图片描述

  • 相关阅读:
    金仓数据库 KingbaseES SQL 语言参考手册 (14. SQL语句:COMMIT 到 CREATE LANGUAGE)
    java 数据存储结构(有序与无序)
    MCR3516与MCR3512读写器在麒麟系统中info.plist文件冲突解决方案
    【2021研电赛】基于动态无线充电技术的自动驾驶小车
    SVN的安装配置
    Windows连接SFTP服务
    学妹学Java(一)
    匈牙利算法讲解
    技术干货|昇思MindSpore 1.5版本中的亲和算法库——MindSpore Boost
    Mybatis实战练习五【修改&删除一行数据】
  • 原文地址:https://blog.csdn.net/xiaoyubuhuiqiche/article/details/127840791