访问控制修饰符介绍
对于访问控制修饰符,有4种不同的访问权限,如果不记住的话有时会很混乱,因此特地写了这篇博文,以备回顾
public
公开,最具开放性,对所有类可见。可用于类、接口、变量、方法
特点,对所有类可见
修饰符 | public |
---|---|
当前类 | true |
同一包内 | true |
子孙类(同一包内) | true |
子孙类(不同包) | true |
其他包 | true |
protected
保护性,对同一包内的类和所有子类可见。可用于变量、方法。不能修饰类(外部类)。
特点:同包或子类
修饰符 | protected |
---|---|
当前类 | true |
同一包内 | true |
子孙类(同一包内) | true |
子孙类(不同包) | true/false |
其他包 | false |
对于子孙类(不同包),在这里说明一下,子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法,即在不同包中,在子类中可以出现子类对象从基类继承来的protected方法,但不可以出现基类对象的protected方法,但基类对象的public方法还是可以出现的。
default
默认,即什么都不写的话,默认就是这种权限,可用于类、接口、变量、方法
特点是在同一个包内可见
修饰符 | default |
---|---|
当前类 | true |
同一包内 | true |
子孙类(同一包内) | true |
子孙类(不同包) | false |
其他包 | false |
private
私有化,或本地化,权限最高,只允许在同一类可见。可用于变量、方法。
特点是只给本类可见
不能修饰类(外部类)
修饰符 | private |
---|---|
当前类 | true |
同一包内 | false |
子孙类(同一包内) | false |
子孙类(不同包) | false |
其他包 | false |
访问控制和继承
对于访问控制和继承,有几条规则
- 父类中声明为 public 的方法在子类中也必须为 public。
- 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
- 父类中声明为 private 的方法,不能够被继承。