面向对象的基本思想之一是分装实现细节并且公开接口。Java语言采用访问控制修饰符来控制类,以及类的方法和变量的访问权限,从而向使用者暴露接口,隐藏内部细节。
Java访问控制修饰符分四种级别:
- 公开级别:用public修饰对外公开
- 受保护级别: 用protected修饰,向子类或同一包中的类公开
- 默认级别:没有访问控制修饰符,向同一个包中的类公开
- 私有级别: 用private修饰,只有类本身可以访问,不对外公开
四种访问级别的可访问范围:
访问级别 | 访问控制修饰符 | 同类 | 同包 | 子类 | 不同的包 |
---|---|---|---|---|---|
公开 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | - |
默认 | 无访问控制修饰符 | √ | √ | - | - |
私有 | private | √ | - | - | - |
顶层类只可以处于公开或默认访问级别,因此顶层类不能用private和protected来修饰。
访问级别仅仅使用于类和类的成员,包括类的成员变量、成员方法和构造方法,而不适用于局部变量,局部变量只能在方法内部被访问。

如上图所示ClassA和ClassB位于同一包中,ClassC和ClassD位于另一个包中,并且ClassC是ClassA的子类。ClassA中有四个不同访问级别的变量。
则在ClassA中可以访问a、b、c和d四个变量。
在ClassB中可以访问a、b和c三个变量。
在ClassC中可以访问a和b两个变量。
在ClassD中可以访问a一个变量。
网友评论