Java访问权限控制简述

四种访问权限

Java中类与成员的访问权限共有四种,其中三种有访问权限修饰词:publicprotectedprivate,。

  • Public:权限最大,允许所有类访问,但其他包下的类想要访问需使用import关键字将这些public类导入包中才可使用,换句话说,import将不同包的类导入到一个包下,从而转化为包访问权限下的情况。
  • Protected:除了提供包访问权限以外,还对继承该类的所有派生类赋予访问权限。
  • Private:权限最小,只能由包含该成员(域和方法)的类本身访问,其他任何类都无法访问。

不使用这三个关键词时,则提供默认包访问权限,该权限只允许同一个包下(即同一个目录下的Java文件)的类访问该类。

注意:private和protected只能修饰成员,无法修饰类。类要么是public的,要么是包访问权限。

成员最终访问权限

  • 类访问权限大小:public>包访问权限
  • 成员访问权限大小:public >protected >包访问权限 > private
  • 成员和类的访问权限优先级: > 成员

成员最终访问权限为类权限和成员权限的叠加。只要类不是public的,无论成员是哪种访问权限,静态与否(即对象成员还是类成员),包外的类都无法访问类成员(也无法静态调用),即对包外所有类不可见。

例子

  • 对于包访问权限的类即使其方法是public的,也无法从包外访问。我用eclipse写了程序实际测试了一下,运行报错如下
    运行结果报错
  • 当包外访问public类的privateprotected(未继承该类)成员时,运行时会报错如下:该成员不可见
    运行结果报错
    运行时提示该类无法解析。

其实道理很简单,因为成员是通过类或类对象调用的,类权限比成员权限优先级高,所以无论成员权限多大,只要类不是public的,就无法通过import导入,该类根本就对包外的类不可见,类的成员更是不可见了。

所以,通常来说,只要类是包访问权限,其成员最多是包访问权限。而且书中也建议:在创建包访问权限的类时,应尽可能将类的域声明为private的,这样才有意义。

展开阅读全文

没有更多推荐了,返回首页