Java访问控制权限

    Java的访问控制权限相比于C++等语言可能稍微复杂一点,不过也不难理解。Java的访问控制权限分为两块——“类或接口的访问控制权限”与“变量和方法的访问控制权限”。

    1.类或接口的访问控制权限(此处分析不包括内部类)

    或接口的访问控制权限是指能不能用该类建立对象,接口能不能被实现等等。能够修饰类或接口访问控制权限的修饰符(modifier)只有两个——public和default.不过,值得一说的是default并不是Java的访问控制关键字,它指的是“没有写访问控制权限修饰符”的情况。

    public修饰的类或接口在同一个包中的任何一个类中都可以被访问。不同包呢?当然能访问啦,否则引包机制不就失效了嘛(因为引包相当于拿到了一个包的public类或接口)。

    default修饰的类或接口在同一个包中的任何一个类中都可以被访问(和public相同),不能被不同包中的类访问。

   总结:类或接口的访问控制权限分为“包中”和“包外”。无论修饰符(modifier)是什么,在“包中”均可访问。对于“包外”,public修饰的类或接口可以被访问,default修饰的类或接口不能被访问。

   2.变量和方法的访问控制权限

  变量和方法的访问控制权限的修饰符(modifier)有四个——public,protected,default和private.

   变量和方法在本类(定义该变量或方法的类)中不论访问控制权限修饰符是什么,均可被访问(这里先不考虑“静态”的情况)。那么接下来只研究类外。类外也分“包内”和“包外”,接下来就从这两方面说起,并且研究“包外”时只考虑引入的包中的public类,因为default的类连直接被访问都做不到,何谈访问变量和方法

    public修饰的变量和方法在“包内”和“包外”均可被访问。

    protected修饰的变量和方法在“包内”可以被访问,在“包外”只能被子类访问。

    default修饰的变量和方法在“包内”可以被访问,在“包外”不能被访问。

    private修饰的变量和方法在“包内”或“包外”均不能被访问。

   总结:对于“类外”,public,protected,default和private的严格性逐渐递增。public可以说没限制,protected剥夺了“包外”非子类的访问能力,default在protected基础上进一步剥夺了“包外”子类的访问能力,至此“包外”的访问能力全无;private更严格,它在default基础上更是一下剥夺了“包内”的访问能力。


    总的来说,看某个成员能否被访问要分两步:1.根据所在类的访问控制权限看该类能否被访问;2.根据该成员的访问控制权限判断取得所在类后该成员能否被访问。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值