• Java基础之访问权限控制


    Java基础之访问权限控制 

    四种访问权限

    Java中类与成员的访问权限共有四种,其中三种有访问权限修饰词:public,protected,private

    • Public:权限最大,允许所有类访问,但其他包下的类想要访问需使用import关键字将这些public类导入包中才可使用,换句话说,import将不同包的类导入到一个包下,从而转化为包访问权限下的情况。
    • Protected:除了提供包访问权限以外,还对继承该类的所有派生类赋予访问权限。
    • Private:权限最小,只能由包含该成员(域和方法)的类本身访问,其他任何类都无法访问。
    • 其中,默认情况下没有任何修饰词,这样的类成员具有“包访问权”,即位于同一个包中的类对其有访问权;而protected为“继承访问权”,即该类的子类对其具有访问权(同时,位于同一个包中的类也对其具有访问权)。

        在一个类的内部,其成员(包括成员变量和成员函数)能否被其他类所访问,取决于该成员的修饰词。Java的类成员访问权限修饰词有四类:private,无(默认情况下),protected和public。其权限控制如下表所示:

    修饰词 本类 同一个包的类 继承类 其他类
    private × × ×
    无(默认) × ×
    protected ×
    public

       

      而对于Java中的“类”(不是其内部成员,两者要区分开),其访问权限修饰词仅有public和“无”(即包访问权)两种,而没有private和protected(有 一个特例,就是“内部类”,其可以是private或protected的)。所以对于类的访问权限,你仅有两个选择:包访问权或是public。

      如果你 不希望其他任何人对该类拥有访问权,你可以把所有的构造器都指定为private,从而阻止任何人创建该类的对象。但是有一个例外,就是在该类的 static成员内部进行创建。如:

        class Soup {
           // private Constructor!
           private Soup() {}
           // Allow creation via static method:
           public static Soup makeSoup() {
               return new Soup();
           }
        }

    成员最终访问权限

    • 类访问权限大小:public>包访问权限
    • 成员访问权限大小:public >protected >包访问权限 > private
    • 成员和类的访问权限优先级: > 成员

      成员最终访问权限为类权限和成员权限的叠加。只要类不是public的,无论成员是哪种访问权限,静态与否(即对象成员还是类成员),包外的类都无法访问类成员(也无法静态调用),即对包外所有类不可见。

      其实道理很简单,因为成员是通过类或类对象调用的,类权限比成员权限优先级高,所以无论成员权限多大,只要类不是public的,就无法通过import导入,该类根本就对包外的类不可见,类的成员更是不可见了。

      所以,通常来说,只要类是包访问权限,其成员最多是包访问权限。而且书中也建议:在创建包访问权限的类时,应尽可能将类的域声明为private的,这样才有意义

    参考:https://www.cnblogs.com/ldq2016/p/5261345.html

      http://blog.csdn.net/MLWong/article/details/53394030

  • 相关阅读:
    如何复制保存阿里巴巴的图片。
    如何在windows2003(IIS6)下配置IIS,使其支持cshtml
    数据库字符串加法,目前没成功
    使用ASP.NET AJAX与Bootstrap 弹窗解决方案
    在MyBatis中采用模糊查询变量的引用标志应当是$而不是#
    如何让SpringBoot工程在log/控制台中实时打印MyBatis执行的SQL语句
    雇员信息完全分页方案
    将雇员信息分页显示
    把Employees显示在页面上
    给EmpMapper开放Restful接口
  • 原文地址:https://www.cnblogs.com/albertrui/p/8309530.html
Copyright © 2020-2023  润新知