第6章-访问权限控制
think in java 读书笔记 第6章-访问权限控制
1.什么是访问权限控制
都知道JAVA应用是由多个不同的类相互配合调用来实现一系列功能的,那我现在有类A,类B两个类,其中类B有很多方法和属性,通过对类B及其方法和属性设置不同的关键字,使得类A只能使用类B中特定关键字修饰的方法和属性,这就是访问权限控制
2.如何实现访问权限控制
想要知道如何实现权限控制,要知道一些概念:编译单元和一些特殊关键字public private protected等。
2.1. 什么是编译单元
都知道JAVA代码都是.java这样格式的文件,经过javac编译之后才能编程成.class这种机器可以识别的机器码。这样的一个*.java文件就是一个编译单元。
2.2. 编译单元的特点
- 一个编译单元至多只能一个class是public的(也可以一个都没有),且这个public的class必须和文件完全同名,大小写都要保持一致。
- 一个编译单元可以有数量不受限的默认(不带任何修饰符)的class,用来为这个编译单元中的public那个class提供支持。
假设存在一个Demo.java文件,里面写的代码可以有这几种场景。
- 仅有一个public的class。
public class Demo{}
- 还拥有不带修饰符的class。
public class Demo{}
class Helper{}
class Utils{}
- 只有不带修饰符的class(一般用不到,此时对文件名不做要求)。
class Helper{}
class Utils{}
3.类上不同的修饰符对访问权限影响
2.2列出了所有可能的加在class前的修饰符,要么是public的,要么是默认啥也没有,他们之间的区别在于。
- public修饰的类,那里都能访问。
- 默认啥也不带的,也成为包访问权限,只能是在处于同一个包下的类才能访问这个类。
如果啥也不带,那么如果这个类位于com.pikzas包下,其他处于相同路径下的类中可以访问那些不带修饰符的class,可以new Helper();而且能够正确的编译,但是如果一个类位于com.alex或者com或者com.pikzas.inner这些路径下,则在这些类中new Helper();这样的操作会提示编译错误,因为此时不具有访问权限。
4.属性和方法上不同的修饰符对访问权限的影响
4.0.访问权限范围由小到大分别是
只能自己这个类中使用 < 同一个包类路径下、不同的类中可以使用 < 任意位置的任意类中都可以使用
分别对应的关键字是 private、default、public