访问控制符

目的:是为了控制一个类的成员是否可以被其他类访问。

类型

Java中提供了3个访问控制符:private,protected,public。除了这三个访问级别外,还有一个不加任何访问控制符的访问控制级别(default),他们之间呈逐次增大的关系,具体如下:

java控制层重构命名_java控制层重构命名


下面我们对这四种访问级别逐个进行讨论:

  1. private (类访问权限)
    被它修饰限定的成员,其访问权限被限制在了成员所在的类的内部,即这个成员只能在当前类的内部被访问。
  2. default (包访问权限)
    被它修饰限定的成员(即不加任何的修饰限定符),其访问权限被限制在了成员所在的包的内部,即其可以被相同包下的其他类使用。
  3. protected (子类访问权限)
    被它修饰限定的成员在default的基础上添加被子类访问的功能,即既能够被同一个包内的其他类访问,还能够被其他包下的子类 访问。(这里的子类所继承的是用protected修饰的成员所在的类)
  4. public (公共访问权限)

被它修饰限定的成员能够被所有类访问,只要是一个工程下即可,不必在同一个包中,也不必要求具有父子继承关系。

使用:

  1. private:类中的成员变量,以及用于辅助实现该类的其他方法(工具方法)一般都用private进行修饰,从而起到信息隐藏的目的。
  2. protected:如果一个类主要用作其他类的父类,其中包含的大部分方法可能仅被其子类重写,而不想被外界直接调用,则用protected对其进行修饰。
  3. public:希望暴露给其他类自由调用的方法应该用public 对其进行修饰。比如:我们经常使用的构造器,为了能够在其他地方创建该类的实例,所以用public修饰。同样外部类为了能够被其他类自由调用,所以大部分外部类也采用public进行修饰。

static

含义:
static是将类的成员变成类 相关,而不是实例相关。用static 修饰的对象不属于外部类的某个对象,而是属于整个类,为整个类所共有。由于被static修饰的对象,被类所共有,所以可以采取类名直接进行引用,不必采取实例化对象之后利用实例进行引用的方式。

使用:

  • 由于引用比较简单,所以对于经常使用的方法或者变量,可以尝试用static修饰,之后直接用类名进行调用的方式。
  • 静态工厂模式来创建对象,如在接口的定义中,用静态工厂的方式来代替构造器的使用。

思考:外部类为什么不能用static、private、protected进行修饰?

  • static: static的作用是把类的成员变量由实例相关变成类相关,而外部类上一级程序单元是包,也即它并不包含于其他类中,所以不可使用static对其进行修饰。
  • private: 与static 同样的道理。private的作用是限定被修饰的对象只能在其定义所在的内部进行使用,而外部类不在任何类的内部,它的上一级程序单元是包,所以不可用private对其进行修饰。
  • protected: protected是将其修饰的成员对象,能够被其他包下的继承protected修饰对象所在类的子类进行使用。但是对于外部类而言,它不在任何类的内部,所以不能使用protected对其进行修饰。