1.private:你无法访问
除了包含该成员的类之外,其他任何类都无法访问这个成员。
个人理解:无法访问的意思是只有在这个类中,你能直接访问。别的类不能直接访问到,但是你可以通过在类中创建其他public的方式访问。比如经常会把类的属性声明为private,而get/set方法是public的,其他类就可以通过get/set方法来访问到这个属性。
直接访问最大范围:同一个类内
2.默认访问权限:包访问权限
当前的包中的所有其他类对那个成员都有访问权限,但对于这个包之外的所有类,这个成员却是private。默认访问权限没有关键字,通常是指包访问权限(有时也表示成friendly)。
个人理解:只有处于同一个包目录下的类才能访问到。
直接访问最大范围:同一个包内
3.protected:继承访问权限
就类用户而言,这是private的,但对于任何继承于此类的导出类(子类)或其他任何位于同一个包内的类来说,它却是可以访问的。(protected也提供了包内访问权限)
个人理解:针对继承功能产生的一个权限关键字,父类的protected修饰的属性和方法对子类(可在别的包目录)可见。但同时也不能忘记它同样具有包访问权限,即对与父类同一个包目录下的其他类也可见。
直接访问最大范围:子类(可跨包)、同一个包内
4.public:接口访问权限
public之后紧跟着的成员声明自己对每个人都是可用的。
个人理解:无论在哪,无论是谁,都可以访问到。可以理解成没有限制,对外开放。
直接访问最大范围:跨类、跨包
请注意“同一个包内”的意思就是要包路径一样,其他访问类在包的子包下也不算。
取得对某成员的访问权的唯一途径:
- 使该成员成为public。于是,无论是谁,无论在哪,都可以访问该成员。
- 通过不加访问权限修饰词并将其他类放置于同一个包内的方式给成员赋予包访问权。于是包内的其他类也就可以访问该成员了。
- 继承而来的类既可以访问public成员也可以访问protected成员。只有在两个类都处于同一个包内时,它才可以访问包访问权限的成员。
- 提供get/set方法。对OOP而言,这是最优雅的方式,也是JavaBean的基本原理。
——《java编程思想》