【Effective Java】条13:使类和成员可访问性最小

区分程序设计的好坏之一就是看模块之间实现细节的隐藏。这其实就是信息隐藏或者称之为封装,是软件设计的基本原则之一。

成员访问级别

Java程序设计准则中,第一规则就是尽可能地使每个类或者成员不被外界访问,即访问级别尽量小。

Java中,对于成员(域、方法、嵌套类和嵌套接口)有四种可能的访问级别。按可访问性递增排序如下:
1. private

只能在声明此成员的类中才能访问

2. package private

与此成员在同一包中都可以访问。不添加任何修饰符代表此级别。

3. protected

声明此成员的类、与声明此成员的类同一包、及该类的子类都可以访问

4. public

任何都可以访问

设计要点

  1. 当你精心设计完程序后,默认地,所有的成员都为private。除非是同一包中的成员需要访问,可修改为package private,否则不予修改;
  2. 成员可访问性,package privateprotected是跨越巨大的。一旦成员被修饰为protected,则以后都需要维护此成员;
  3. 有个特殊情况,在接口中声明的方法,默认为public,实现方法也为public。子类重写父类的方法,可访问级别不能低于父类的可访问级别;
  4. 实例域决不能用public修饰,除非此域是常量;
  5. 针对数据域,就算采用final修饰,其值还是可能会被改变的。针对此种设计,可以采用如下方法。
//以为是不可变的域,但其实是可变的
public static final Thing[] VALUES = {...};

返回此种域,你可以

//推荐
private static final Thing[] PRIVATE_VALUES = {...};
public static final List<Thing> VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));

private static final Thing[] PRIVATE_VALUES = {...};
public static final Thing[] values() {
    return PRIVATE_VALUES.clone();
}

这样可确保成员属性不会被更改。

总结

  1. 使域可访问性尽量最小;
  2. API设计完成后,尽量避免向API中添加其他成员;
  3. 除了公有静态final域为public之外,其他域都不允许为public,且要确保公有静态final域所引用的对象都是不可变的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值