Java中4种权限修饰符修饰类、成员的分析

前言:在最近做项目中,对权限修饰符又有了新的认知,对这块知识的脉络也越来越清晰,来博客mark一下。

这篇博客是对前两篇博客的一个总结提炼(https://blog.csdn.net/u013771764/article/details/81226908https://blog.csdn.net/u013771764/article/details/82226855),需要了解提炼背景的朋友可以通过先看看前两篇的背景介绍。

(ps.文中所说的default修饰指的是不加任何权限修饰符。此外,为了叙述的方便,本文中涉及的类指的是外部类,涉及的成员指的是非静态成员方法)

1、类的2种权限修饰符分析

从之前博客的分析中我们知道,外部类仅能被public和default修饰。当被default修饰时,该类仅在包内可见,在包外不可访问;而被public修饰时,则不仅能在包内可见,在包外同样可见。

换句话说就是,类的两种权限修饰符的访问权限所讨论的维度是它的上一级:包。决定类仅在包内可见(default修饰时)还是包内包外都可见(public修饰时)!

2、成员的4种权限修饰符分析

1)private修饰的成员:该成员仅对自己这个类可见。

2)default修饰的成员:该成员对同一个包中的类都可见。

3)protected修饰的成员:该成员除了对同一个包中的类可见外,还对包外的子类(成员所在类的子类)可见。

这里要注意一个细节!protected这个权限修饰符比较特殊的一点在于,protected是专为子类提供的修饰符。也就是说,在包外的子类中(假设叫这个子类为Class Son),即使是成员所在类的对象也无法访问被protected修饰的成员,需要用Son类的对象进行访问(成员所在类如果有多个子类,别的子类的对象也不行)。

我之前看过一篇博客,讲述了Object类中clone方法的使用,clone方法就是一个被protected修饰符所修饰的方法。博主开篇就表明之前因为对protected修饰符的理解产生了偏差,从而出bug了,感兴趣的朋友可以看下这篇博客:https://blog.csdn.net/three__stones/article/details/50953849

4)public修饰的成员:该成员不仅对同一个包中的类可见,在包外的类中也都可见。

换句话说就是,成员的4种权限修饰符的访问权限所讨论的维度是它的上一级:类。决定成员在哪些类中是可见的。

3、类的权限修饰符与成员的权限修饰符的关联

我们知道在进行成员调用的时候,需要用该成员所在类的对象进行调用。结合权限修饰符的话,我们可以这样分析一个成员的调用:

1)先看成员的权限修饰符,这样可以知道成员在哪些类中是可见的。

2)再看该成员所在类的修饰符,这样可以知道该类的对象是仅能包内可见还是包外也可见。

3)根据上述两者,取范围的交集。在交集所限定的范围,进行成员的调用。

上述可能比较抽象,我们举一个例子来分析。

例如某个成员被public所修饰,而该成员所在类是被default所修饰。

首先从成员的权限修饰符我们知道,该成员在包内和包外的所有类中都可见,但是成员所在类的权限修饰符限定了该类仅在同一个包中可见。

所以最终只能在同一个包中的类里面,创建该成员所在类的对象进行成员的调用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值