您的位置:首页 > 编程语言 > Java开发

Java访问权限控制简述

2016-11-29 19:58 399 查看

四种访问权限

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

Public:权限最大,允许所有类访问,但其他包下的类想要访问需使用
import
关键字将这些public类导入包中才可使用,换句话说,
import
将不同包的类导入到一个包下,从而转化为包访问权限下的情况。

Protected:除了提供包访问权限以外,还对继承该类的所有派生类赋予访问权限。

Private:权限最小,只能由包含该成员(域和方法)的类本身访问,其他任何类都无法访问。

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

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

成员最终访问权限

类访问权限大小:
public
>
包访问权限


成员访问权限大小:
public
>
protected
>
包访问权限
>
private


成员和类的访问权限优先级:
>
成员


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

例子

对于包访问权限的类即使其方法是
public
的,也无法从包外访问。我用eclipse写了程序实际测试了一下,运行报错如下



当包外访问
public
类的
private
protected
(未继承该类)成员时,运行时会报错如下:该成员不可见



运行时提示该类无法解析。

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

所以,通常来说,只要类是包访问权限,其成员最多是包访问权限。而且书中也建议:在创建包访问权限的类时,应尽可能将类的域声明为
private
的,这样才有意义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java