java中的访问权限:public、protected、包访问权限、private

 

这是非常熟悉的,因为都知道,java中的封装是指将数据和方法包装进类中,并且赋予合适的访问控制

类中的数据,方法均含有上述访问权限控制,同时类也是含有访问权限控制

类的访问权限控制只有包访问权限和public权限,不含protected和private权限

在没有声明package的类的访问权限默认为包访问权限

 

注意以下使用“类”只是为了说明问题的方便

问:一个类声明为包访问权限,其中含有一个public权限的成员,其它包中的类能否访问此类的public类型成员

答:不能,首先需要关注类的访问权限,如果类都不能进行访问,那么类中的成员也就可想而知。

问: 还是上面那个问题,如果含有的是一个public static类型的成员,情况是否会发生变化

答:不会

问:将这个类的声明改为public时,但是含有一个static类型的成员,情况如何

答:可访问类的public成员,但是不能访问其它权限成员,当然,此时的static类型的成员默认为包访问权限,因此也是访问不了的

总的来说,java中对于权限的访问时比较严格的,除了对类的权限进行检查外,还需要对类中的成员进行检查,获取到对类的访问权限后,类中成员的访问权限依然由限制,这在java的字节码文件中也可以看到,类和字段表中均有权限访问的标志位。

 

特殊情况:如果时默认包访问权限,并且含有public static类型的成员,外部时可以通过反射访问此成员,但是不能创建对象。