之前学习C++的类的时候,发现设计一个类时,很少用到protected权限修饰符,一般都用public和private。需要被外部访问到的用public修饰,不需要被外部访问的就用private封装起来,但是学习的时候记得还有一个protected,当时一直搞不明白要多设计一个protected有什么用。
直到最近在用Java编写一个CTS测试用例,才发现了protected好用的地方。因为最近使用类的继承使用的较多,在进行类的继承的时候,一般都是默认的public继承,也就是继承下来的成员访问权限基本不变,这样的话,如果原先为public的成员,则子类中同样可以用,原先为private的成员,在子类直接调用的时候出现了问题。那这样就有问题了,如果一个成员既需要被子类访问到,又需要能够保护起来,不被外界随意修改,public 和 private 好像都无法很好的解决这个问题,这时候protected 就派上用场了。使用protected 修饰的成员,在继承子类中仍然时protected,仍然可以被访问,但是外界不能对其随意访问,真是太巧妙了。
看到网上有一种比喻说得挺形象,private是个人秘密,只有自己可用,除自身外的类都不可用,protected是家族秘密,只有父类子类等等有继承关系的可以使用,外界无法使用。而public则是公开的,自身和外界都能使用。