Java访问权限控制

面向对象的核心思想之一就是封装,只把有限的方法和成员公开给别人,这也是迪米特法则的内在要求,是外部调用方对方法体内的实现细节知道得尽可能少。

如何实现封装呢?

需要使用某些关键字来限制外部对类内属性和方法的随意访问,这些关键字就是访问权限控制符

 Java中的访问权限包括四个等级,权限控制严格程度由低到高,如下表所示:

访问权限控制符任何地方包外子类包内类内说明
publicYESYESYESYES可以修饰外部类、属性、方法,表示公开的、无限制的,是访问限制最松的一级,被其修饰的类、属性和方法不仅可以被包内访问,还可以跨类、跨包访问,甚至允许跨工程访问
protectedNOYESYESYES只能修饰属性和方法,表示受保护的、有限制的,被其修饰的属性和方法能被包内及包外子类访问。注意,即使并非继承关系,protected属性和方法在同一包内也是可见的
NONOYESYES即无任何访问权限控制符。千万不要说成default,它并非访问权限控制符的关键字。无访问权限控制符仅对包内可见
privateNONONOYES只能修饰属性、方法、内部类。表示“私有的”,是访问限制最严格的一级,被其修饰的属性或方法只能在该类内部访问,子类、包内均不能访问,更不允许跨包访问

由此可见,不同的访问权限控制符对应的可见范围不同。在定义类时,要慎重思考该类、属性、内部类的访问权限,提倡严控访问范围。过于宽泛的访问访问不利于模块间解耦及未来的代码维护。假如,在代码重构时,private方法过旧,可以直接删除,且无后顾之忧。如果删除一个public的方法,是不是要谨慎又谨慎的检查是否被调用。 

在定义类时,一下互联网公司常用的访问权限控制规则如下,总的原则是推荐访问控制级别从严处理

1、如果不允许外部直接用过new创建对象,构造方法必须是private;

2、工具类不允许有public或default构造方法;

3、类非static成员变量并且与子类共享,必须是protected;

 

4、类非static成员变量如果仅在本类使用,必须是private;

5、类static成员变量如果仅在本类使用,必须是private;

6、若是static成员变量,必须考虑是否为final;

7、类成员方法只供类内部调用,必须是private;

8、类成员方法只对继承类公开,那么限制为protected。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值