Java访问权限控制简述

本文介绍了Java中的四种访问权限:Public、Protected、Private及默认包访问权限。Public权限最大,允许所有类访问,Protected允许继承类访问,Private仅限自身类访问,而默认权限只允许同包内访问。类访问权限优先级:Public > Protected > 默认 > Private,成员访问权限:Public > Protected > 默认 > Private。类的最终访问权限由类权限和成员权限叠加决定,如果类是包访问权限,那么其成员对外不可见,建议将包访问权限类的域声明为Private。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

四种访问权限

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

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

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

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

成员最终访问权限

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

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

例子

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

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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值