大部分开发可能写代码的时候都用到了public,private ,然而我们一开始学习java的时候其实介绍了public,private,protected,default。

然后protected就可能就认识一下就过了,并没有用到。所以,我特意写下这个笔记提醒一下自己。

public:

具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。

protected:

主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西

default:

有时候也称为friendly,它是针对本包访问而设计的,任何处于本包下的类、接口、异常等,都可以相互访问,即使是父类没有用protected修饰的成员也可以。

private:

访问权限仅限于类的内部,是一种封装的体现,例如,大多数成员变量都是修饰符为private的,它们不希望被其他任何外部的类访问。

java protected 同一个包下的方法 java中protected的用法总结_父类

上图告诉了我们protected能被类内部,本包和子类使用。

然后这里就有一个疑问了?那到底什么时候用到protected呢?

java protected 同一个包下的方法 java中protected的用法总结_子类_02

java protected 同一个包下的方法 java中protected的用法总结_子类_03

这是ArrayList的一个protected方法,removeRange,作用在于移除[fromIndex,toIndex)之间元素,然后ArrayList的clear方法就是内用调用这个方法清除所有的元素,看到这里我们开始明白protected这样用是因为开发希望有个方法能让其内部使用或者子类使用,且该方法还不被外部知道,让ArrayList只暴露出基本的功能方法,外部调用不能调用此内部方法,保持外部方法的简洁性。

 

 

总结:protected方法的存在是希望有一个内部方法被该类或该类的子类使用(子类可以基于集成调用此内部方法),外部不应也不能知道该方法,因为有可能滥用导致问题。