访问权限控制
关于java中的访问权限控制,需要先理解以下几个概念:
(1)编译单元:当我们编写出一个java源代码文件时,这个文件就被称为编译单元(或转译单元),这个编译单元的后缀名为.java。在编译单元内则可以有一个public类和多个非public的类,但是如果有public类的话,编译单元的名字必须和public类的名字一致,否则编译时会报错。如果此编译单元内没有public类的话,编译单元的名字就无所谓了。
(2)类文件:当编译一个.java文件(编译单元)时,在.java文件中的每一个类都会有一个输出文件,该输出文件的名称与.java文件中每个类的名称相同,只是多了一个后缀.class。每一个.java文件编译后生成的这些.class文件集合称为类文件。所以,每一个.java文件编译后都会得到一个类文件,这个类文件中包含了大量的.class文件。
(3)类库:类库就是一组类文件的集合。每一个类文件中都包含了一个public类以及任意数量的非public类。
思考一个问题:如果类名称冲突了怎么办?比如我自己写了一个A类需要加载到一台机器上,但是这台机器上已经有别人写好的另外一个A类,这时该如何处理呢?这时就引出了包的概念。
包:关键字为package,包的出现完美的解决了类名冲突的问题,把具有相同类名,但有可能具有不同功能的类放置于不同的包里,这样当我们需要使用某类时,通过指定不同的包,从而区别出应该正确调用的类。
(4)包:类库单元,包中管理组织了类库中一部分类文件,不同的包中管理着不同的类文件,从而将类库完美的区分开来。如果在java编译单元中使用package语句,那么它必须位于编译单元的除注释外的首行。例如在文件起始处写:package access;那么它表示你在声明该编译单元是名为access的类库的一部分。或者说你正在声明的该编译单元中的public类名称是位于access名称的保护伞下,任何想要使用该名称的人都必须在使用前给出选择,指定全名或与access结合使用import导入。
java中的访问权限:java中为什么需要访问权限控制呢?思考以下2个场景:
场景1:工程师A编写了一个类ClassA,但是工程师A并不希望ClassA被该应用中其他所有的类都访问到,那么该如何处理?
场景2:如果工程师A编写了一个类ClassA,其中有两个方法fun1、fun2,工程师只想让fun1对外可见,也就是说,如果别的工程师来调用ClassA,只可以调用方法fun1,那么该怎么处理?
此时,访问权限控制便可以起到作用了。在Java中,提供了四种访问权限控制:默认访问权限(包访问权限),public,private以及protected。
一.修饰类
修饰类的话,只能有2个关键字来修饰
默认访问权限(包访问权限):用来修饰类的话,表示该类只对自己和同一个包中的其他类可见。常见的就是源文件中的非public类。
public&#