java提供了三个访问控制符:private、protected以及public,分别代表了三个访问控制级别,还有一个不加任何访问符的访问控制级别,总共四个访问控制级别。控制级别由小到大如图所示:
访问控制级别由小到大
private(当前类访问权限):只能被当前类的内部访问;
default(包访问权限):如果类里的一个成员(包括成员变量、方法和构造器等)或者一个外部类,不使用任何访问控制符修饰,就称它是包访问权限的,default访问控制的成员或外部类可以被相同包下的其他类访问;
protected(子类访问权限):可以被同一个包中的其他类访问,也可以被不同包中的子类访问。在通常情况下,如果使用protected来修饰一个方法,通常是希望其子类来重写这个方法;
public(公共访问权限):可以被所有类访问,不管访问类和被访问类是否处于同一个包内,是否具有父子继承关系。
访问控制级别表如下:
注意:访问控制符是用于控制一个类的成员是否可以被其他类访问,对于局部变量而言,其作用域就是它所在的方法,不可能被其他类访问,因此不能使用访问控制符来修饰。
访问控制符的使用的基本原则:
1) 类里的大部分成员变量都应该使用private修饰,只有一些static修饰的、类似全局变量的成员变量,才可能考虑使用public修饰。除此之外,有些方法只用于辅助实现该类的其他方法,这些方法被称为工具方法,工具方法也一个使用private修饰。
2) 如果某个类主要用作其他类的父类,该类包含的大部分方法可能仅希望被子类重写,而不是想被外界直接调用,则应该使用protected修饰这些方法。
3) 希望暴露出来给其他类自由调用的方法应该使用public修饰。