• java中的访问修饰符详解


    主要讲述一下java中protected的修饰控制范围。

      在叙述protected修饰符使用之前,先来说一下java,可以发现,开发java程序是一个时时刻刻都在编写类、开发类、定义类的过程。类里面可以有main方法。(main方法不管存在那个类中,都要通过打点的方式调用某个类的成员)

      在当前类的定义中,main方法之外,可以直接通过成员的名字来使用本类中的成员变量,不管这个成员是什么访问修饰符修饰的,也不用通过对象打点调用的方式进行,当前类的main方法中,可以通过对象打点的方式调用。所以说访问控制修饰符在当前类的定义中相当于没有起到任何作用。但是java程序的开发,不仅仅是开发一个类而已,更多的是类之间的相互耦合,换句话说就是一个已经定义好的类,需要作为另一个类的成员,或者是成为另一个类的局部变量(在方法中声明的)、或者是成为基类被子类继承等,也只有在这个时候访问控制修饰符才会起到访问控制的作用。

      访问控制符中的private,和public是最好理解的。

      private:

       1.在当前类开发中,main方法之外可以直接借助名字使用,当前类的main方法中可以使用对象打点的方式直接使用成员。

       2.在当前类之外,使用对象(或是类名,针对静态的)打点调用都是被限制的。这时候有同学问,那我开发的这个私有的成员难道不能使用了吗?不是,可以通过在当前类中开发一个公有的方法,在公有方法中可以使用这个私有的成员,从而达到间接使用私有成员。

       3.在继承中,私有成员禁止被继承,也就是说在子类的开发中,拒绝直接使用私有成员的名字进行使用。

      public:

       1.在当前类开发中,main方法之外可以直接借助名字使用,当前类的main方法中可以使用对象打点的方式直接使用成员。

       2.在当前类之外,使用对象(或是类名,针对静态的)打点调用是被允许的。

       3.在子类中,公有成员允许被继承,也就是说在子类的开发中,可以直接使用公有成员的名字进行使用。

      protected:

          protected这个修饰符比较繁琐,它涉及到是否是同一个包的问题。

       同一个包的情况:

       1.在当前类开发中,main方法之外可以直接借助名字使用,当前类的main方法中可以使用对象打点的方式直接使用成员。

       2.在当前类之外,同一个包中,使用对象(或是类名,针对静态的)打点调用是被允许的。

       3.在子类中,同一个包中,受保护成员允许被继承,也就是说在子类的开发中,可以直接使用受保护成员的名字进行使用。子类的main方法中可以使用子类或是父类对象打点调用。

       4.在当前类之外,子类之外,要使用子类的类中,同一个包中,可以使用子类或是父类对象打点调用。

       不同包的情况:

       1.在当前类之外,不同包中,使用对象(或是类名,针对静态的)打点调用是被禁止的。

       2.在子类中,不同包中,受保护成员允许被继承,也就是说在子类的开发中,可以直接使用受保护成员的名字进行使用。子类的main方法中只能通过子类对象打点调用。父类对象不行,这个时候相当于父类中的受保护成员跨包了。

       3.在当前类之外,子类之外,要使用子类的类中,与子类同一个包中,通过子类对象打点是调用不出父类中的受保护的成员的。父类对象更不行,这个时候相当于父类中的受保护成员跨包了。如果想要通过子类对象调用父类的受保护的成员,需要重新覆写父类的这个成员。

       4.在当前类之外,子类之外,要使用子类的类中,与父类同一个包中,通过子类对象打点是可以调用父类中的受保护的成员的。父类对象也行,同个包中。

       5.在与父类和子类都不同包的第三个包中,要想通过子类对象调用父类的受保护成员,可以通过覆写父类受保护成员,并将访问限制符修改成public。

    在实际的开发中也许很少用到protected来作访问控制,但是java的这个修饰符设计很巧妙,思想很高。同包中可以看做是public,异包中可以看做private。讲一个实际的列子。clone()方法。

    如果自定义的类,需要提供clone这个方法,实现对象副本的制作。那么需要重新覆写clone这个方法,clone这个方法在Object类中作为受保护成员被提供,且在Java中所有的类都是继承自Object的。有如下关系:

    Object类处在java.lang包,

    我们自定义的类,大多不在java.lang包中

    而我们很有可能在另外的第三个包中调用自定义类的clone方法。

    所以有如下开发方法:

    在自定义类中覆写clone方法,并将方法改成public来修饰。

    总结如下:

  • 相关阅读:
    SpringBoot-启动原理解析及源码阅读-todo
    SpringBoot-入门简介和优缺点分析
    《机器学习》笔记 第2章——模型评估与选择: 经验误差与过拟合、评估方法、性能度量、比较检验方法、偏差与方差
    《机器学习》笔记 第1章——绪论 : 基本术语/假设空间的基础概念
    【JS 01】 JS中的JSON.stringify后的json字符串后怎么转为Java中String.class可以直接接受的转义json字符串?
    【Java多线程07】 并发安全读取Shell脚本/命令的输出的INFO流和ERR流
    时序预测 03
    时序预测 02
    时序预测 01
    【搬运链接】美团技术团队
  • 原文地址:https://www.cnblogs.com/bandaobudaoweng/p/10804370.html
Copyright © 2020-2023  润新知