访问控制
目录
类的访问控制
在编写类的时候可以使用两种方式控制对类的访问
- public class 类名
- class 类名
public class
- 类名称必须与文件名称完全一致
- 可以被其他包访问
class
- 可以与文件名称不一致
- 没有被public修饰则该类拥有包访问权限,即该类只可以用于该包之中
小结
-
每个编译单元(文件)都只能有一个public类。即每个编译单元都有单一的公共入口,用public类实现。此时,mian()就必须要包含在public类中。
class定义的类也可以有main方法,可以作为启动类执行,执行时不能使用java 文件名,而应该使用java class定义的类名
-
public类的名称必须完全与含有该编译单元的文件名称一致,包括大小写。如果不匹配则编译错误
-
总的来说,一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求
成员访问控制
Java借助private、protected、public与默认修饰符提供了成员访问控制。适用于字段、方法或类。
private
如果成员使用private修饰符声明,那么该成员将只能由定义实体的类中的包含的代码访问
protected
成员只能由定义在如下范围内的代码访问
- 定义成员的类
- 相同包中的类
- 定义类的子类,不管子类在那个包中定义
默认(或包)
成员可以由定义在如下范围内的代码访问
- 定义成员的类
- 定义在同一包中的类,类似于定义成员的类
public
成员可以由任意类中的代码访问
小结
成员访问修饰符与控制范围
关于继承的一些规则
子类中继承的成员不能拥有比原先赋值的权限更弱的访问权限,只能拥有更强的访问权限。最弱的访问权限时private,最强的访问权限是public。访问权限强弱:public > protected > 默认 > private
- 在超类中声明为public的方法必须在所有的子类中声明为public;
- 在超类中声明为受保护的方法必须子类中要么为protected,要么为public
- 不声明访问控制的方法(不使用修饰符)不能在子类中声明为private
- 声明为private的成员无法被继承
- 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。