类成员和变量使用4种访问控制修饰符(access modifiers)
- public
- protected
- default
- private
首先,你得理解两种不同类型的访问情形
- 一个类里的方法是否可以访问另一个类的成员——用点操作符 (.)调用方法或者变量
- 子类是否可以继承父类的成员——如果子类可以继承该成员,那子类就相当于拥有了它
小提示:虽然说实例变量总是允许使用public,但实际上,最好是用private或者protected。如果变量需要被读写,那就加上public的get/set方法去读写它。
下面细说每个访问控制修饰符:
Public
- 无访问限制
Private
- 只能用于该类内
- 也不能被继承
- 子类可以定义跟父类相同名字的方法,但是这不是覆盖(override),只是碰巧名字相同而已
Protected
- 同一包(package)里的任何类可见
- 任何子类可以通过继承来获得访问,无论子类和父类是否在同一包里
- protected = 继承, 对于包外的子类来说,protected成员只能通过继承来获得访问权限,不能用父类对象引用(a reference to an instance of the superclass)来获取
- 一旦“包外的子类”继承了这个成员,这个成员在该子类内就相当于private了,除了子类的子类
Default
- 同一包里的任何类可见
- 只有子类和父类在同一包里,子类可以通过继承来获取访问权限。也就是说,default 成员只有同一包里的子类可见。
小提示:本地变量(local variable)不能用访问控制修饰符,实际上,唯一可以用于本地变量的修饰符就是final