Java中访问修饰符的含义及使用范围:

1、要想明白访问修饰符的修饰范围,你得明白一个概念:什么是包?

为了更好地组织类,Java提供了包机制。包是类的容器,用于分隔类名空间。如果没有指定包名,所有的示例都属于一个默认的无名包。

Java中的包一般均包含相关的类,例如,所有关于交通工具的类都可以放到名为Transportation的包中。

程序员可以使用package指明源文件中的类属于哪个具体的包。包语句的格式为:
package pkg1[.pkg2[.pkg3…]];

程序中如果有package语句,该语句一定是源文件中的第一条可执行语句,它的前面只能有注释或空行。另外,一个文件中最多只能有一条package语句。

包的名字有层次关系,各层之间以点分隔。包层次必须与Java开发系统的文件系统结构相同。通常包名中全部用小写字母,这与类名以大写字母开头,且各字的首字母亦大写的命名约定有所不同。

当使用包说明时,程序中无需再引用(import)同一个包或该包的任何元素。import语句只用来将其他包中的类引入当前名字空间中。而当前包总是处于当前名字空间中。

如果文件声明如下:
package java.awt.image

则此文件必须存放在Windows的java\awt\image目录下。


2、知道包的概念之后,继续看:

(1)private:私有的,仅在类内部可见;

(2)不写:默认不写访问修饰符,类内部,本包中可以访问;

(3)protected:受保护的,类内部,本包中,子类中都能访问;

(4)public:公有的,任何包都能访问。


修饰符访问高低排序:public > protected > 不写 > private

以上对类的修饰符只有public和default(内部类除外)。

对方法和变量修饰,这四个访问修饰符都行。


java 范型T用法_修饰符


外部包:包括父包和子包。

这里有个小问题,我曾经测试的时候也迷惑过,就是当父类的字段我不加修饰符,即默认不写什么,我在子类中也能访问这个字段,怎么和上表中的第三个不一样?

想了一会儿,发现我是在同一包中使用继承的,甚至测试继承时,都会把代码写在同一个面板内,这时它已经满足了“在本包中”这个条件,故子类可以访问父类的default字段。