private、public、protected 这三者大家都不会感到陌生。访问权限的修饰词,给类中的每一个成员定义一个使用范围,但是在使用的时候,可能有人不会太在意他们的区分,在某些情况下,不进行区分也许都是可行的,但是却不一定是最好。可能,一时也不会暴露出什么问题,但是,当项目变得庞大而复杂的时候,这样做就有可能留下了隐患或者缺陷。这虽然是一个细节,但是细节往往就是决定成败的因素。所以,还是有必要理清一下它们的概念和区分,以便在实际使用中,应用到位。
修饰词的区分
缺省状态下
在新定义一个成员的时候,如果没有设定一个访问权限,那么它默认是包访问权限(有时也表示为friendly),即在同一个package里都能进行访问、使用。
public
public的权限是接口访问权限。即在同一目录下,只要声明了该对象,就可以使用它。
private
private的访问权限是私有的,只有在同一个类下,其他类是无法调用被定义为private的成员的。这样的定义可以很好地隐藏底层的具体实现,比如如下用法:
public class A{
private A(){
}
static A getA(){
return new A();
}
}
public class Main(){
public static void main(String[] args){
A a = new A();
a.getA();
}
}
protected
首先,它的定义是包访问权限,即同一个包里,它是可以被访问的;其次,继承的时候它也将被继承。这里需要说明的是,private在继承的时候是不会被继承的,而public是只要在同一个目录下就能访问的,相对来说,protected会比较有意思一点。
总结
其实,用一张表格就可以很清晰的区分它们。
修饰词 | 当前类 | 同一个package里 | 子类 | 其他package里 |
---|---|---|---|---|
private | √ | X | X | X |
默认缺省 | √ | √ | X | X |
protecte | √ | √ | √ | X |
public | √ | √ | √ | √ |
在实际应用中,我们还是要根据实际情况进行选择,不能图方便省事给个能用的就行。。以上内容来源于《JAVA编程思想》第四版总结出来的,如果不正确的地方欢迎指出。
更多精彩内容可关注我的博客,更新相对及时传送门