public protected package private
接口访问权限、继承访问权限、包访问权限、你无法访问
Java访问权限修饰词的使用可分为两部分:对类的修饰和对类成员的修饰。
注:方法中的局部变量不能加上访问权限修饰词。因为局部变量的有效范围是在方法内,它本身就是一个访问权限的设定,所以加入访问权限修饰词没有意义。
对类的修饰
- 每一个文件都只能有一个public类,他可以包含众多包访问权限的类。(当然public类的内部是允许有public类的,这个类可以当成一个方法来看,所有修饰词都可以使用。)
- public类的名称必须完全与该文件的文件名相匹配,包括大小写。
- 文件内也可以没有public类,此时可以随意对文件命名(但是容易让人在阅读和维护代码时产生混淆)。
- 不能使用private和protected这两个访问权限修饰词去修饰类。
对类成员的修饰
- 目的有俩:设定外部可以使用和不可以使用的界限;将接口和具体实现进行分离,这样类库设计者可以更改类的内部工作方式,而不必担心会对调用者产生影响。
- 建议:类中成员的组织形式可以按照访问权限进行摆放,将public成员置于开头,接着protected、包访问权限、private。这样使用者从头读起可以首先阅读最为重要的部分public(因为可以从文件外部调用它们),等到遇见作为内部实现细节的非public成员时停止阅读。
对Java访问权限的理解
- private私有构造:不能通过构造器来创建对象。不能被继承。
- 包访问权限:如果不提供任何访问权限修饰词,则意味着它是“包访问权限”。
- protected:与继承相关联。基类的创建者会希望有某个特定成员,把对它的访问权限赋予派生类而不是所有类,这时候使用protected。protected也提供包访问权限(即:子类在不同包或同一个包下,都是可以访问protected修饰的内容;其他在同一包下的类可访问protected修饰的内容,不同包下的类不可访问)。
- public:对访问权限不做限制。
访问权限表格对比
访问权限 | 修饰词 | 同类 | 同包 | 子类 | 不同的包 |
---|---|---|---|---|---|
公开 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | × |
默认 | 没有任何修饰词 | √ | √ | × | × |
私有 | private | √ | × | × | × |
总结
- 访问权限的控制常被称为是具体实现的隐藏。
- 把数据和方法包装进类中,以及具体实现的隐藏,常共同被称作是封装。
- 访问权限控制专注于类库创建者和该类库的外部使用者之间的关系,这种关系也是一种通信方式。