人在什么面前最容易失去抵抗力?
美色, 算是一个, 比如说西施的贡献薄就是忍辱负重, 以身报国, 助越灭吴; 金钱, 算是另外一个, 我们古人常说 "钱乃身外之物, 生不带来死不带去", 但我们又都知道 "有钱能使鬼推磨".
除去美色和金钱, 我认为还有一个, 就是读者的认可 --"二哥, 你的文章真的很棒, 我特别喜欢. 希望能多多更新 Java 基础知识, 真的是受益良多, 就好像是在读王小波的散文, 但又学了编程!"-- 你说, 收到读者这样暖暖的评语, 还需要美色和金钱?"两者皆可抛" 嘛.
这篇文章主要介绍一下 Java 的访问权限控制.
01 访问权限控制的重要性
舒淇曾说过这样一句令人感到震撼后又虎躯一震的话:"我要把我曾经脱下的衣服一件一件的穿回来!" 如今, 她做到了 -- 通过自己的努力, 不仅得到了观众的认可, 得了很多大奖, 还收获了幸福. 尽管, 真的是尽管, 还有一些 "忆往昔峥嵘岁月稠" 的朋友在电脑硬盘的深处留存了一些舒淇早年的珍藏版照片.
我扯这个例子主要为了证明一句话 -- 访问控制 (或隐藏具体实现) 与 "最初的实现并不恰当" 有关 -- 如果舒淇当初那些照片的权限不是那么公开化的话, 那现在就可以私自烧毁了; 或者换一种出道方式; 然而没有如果了.
在你最初的编程生涯中, 不知道你是否创作过下面这样 "优秀" 的代码, 就像程序清单 1-1 那样.
程序清单 1-1:
- public class NiubiUtil {
- public static Date getNextDay() {
- long millis = 24 * 60 * 60 * 1000;
- try {
- Thread.sleep(millis);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return new Date(System.currentTimeMillis());
- }
- }
本来你这些代码只是自己写着玩呢, 谁知道被一个叫小二哥的同事不经考量地调用了. 这一调用不要紧, 小二哥的代码真的活活地等了一整天 -- 产品经理小王老师某一天心血来潮非要测试小二哥的代码, 然后点了查看下一天的按钮, 程序真的在那静静地等着, 直到下一天真的来临.
后果是, 小王老师为了安抚用户们躁动的情绪把小二哥直接拉出去祭天了; 你躲在角落里瑟瑟发抖, 心里默默念叨了句话 --"小二哥, 你走好, 兄弟真的对不住了".
一场血淋漓的惨案啊! 只因为 Java 访问权限控制的使用不当 -- 该 private 的方法, 结果失误写成了 public-- 论访问权限控制的重要性.
02 为什么需要访问权限控制
我已经在 Java 编程的道路上混迹了多年, 自然也写过无数曾经看起来那么 "优秀" 的代码. 随着时间的推移, 再回首过往的那些代码时, 总有一种 "这真的出自我手?" 的疑问.
这种疑问包含两层意思, 一层是感慨真的写得好, 就好像年老时的李白看见自己年少时写的《望庐山瀑布》:"日照香炉生紫烟, 遥看瀑布挂前川; 疑是银河落九天, 飞流直下三千尺."-- 哟, 老子年轻时写得也不赖啊.
另外一层是感慨真的写得差, 比如说程序清单 1-1, 往事不堪回首啊, 只能都随风, 都随风, 都随风而去!
对于这些写得很差的代码, 我每次看见都想再修改一次, 期待她更可读, 更易理解, 更具可维护性; 但在美好的愿景下, 也存在着巨大的压力, 因为有好多其他的地方引用了要修改的代码, 牵一发而动全身啊.
在变与不变的过程中, 我发现 -- 访问权限控制真的太重要了. 在写代码的过程中, 我们需要尽量遵循这样一个原则 -- 除了那些必须 public 的方法, 尽量把其他方法定义为 private. 这样做的好处是, 在重构 private 方法的时候不必再担惊受怕, 因为它们不会被类外部访问到.
03 protected 权限修饰符是用来干嘛的
我们知道, public 权限修饰符使类的一切方法和属性对外可见; private 权限修饰符使类的一切方法和属性只对内部可见; 那么 protected 权限修饰符呢?
假如有一个叫王二的家伙, 他有三个属性, 分别是私生活, 外在形象和被保护的财产, 就像程序清单 3-1 那样.
程序清单 3-1:
- public class Wanger {
- // 私生活
- private String life;
- // 外在形象
- public String image;
- // 被保护的财产
- protected String money;
- }
王二生了一个孩子叫王小二, 就像程序清单 3-2 那样.
程序清单 3-2:
- public class Wangxiaoer extends Wanger{
- @Override
- public String toString() {
- return "可以继承的财产:" + money + "; 塑造的人设:" + image + "; 得不到的私生活:";
- }
- }
王小二可以继承到王二的财产 money(据说王二在王小二出生的第一个月为其存了 100, 以后每个月的利率为 12%, 现在存款是 3758.17, 你知道王小二现在多大了吗?), 也可以模仿一点父亲的外在形象 image, 但却不能按照父亲的私生活方式生活.
注意到三个权限修饰符的区别了吗?
protected 可以保护王二的财产顺利地继承到王小二那里, 外界的人是访问不到的; public 不安全, 因为不仅王小二可以继承访问, 外界其他人也可以访问; private 太私有化, 不仅外界访问不到, 王小二也继承不到.
04 总结
访问权限控制的两个重要作用: 第一是为了防止外界触碰到不该触碰的地方 (private 修饰的成员变量或者方法); 第二是让类的设计者可以更改内部(private 修饰的成员变量或者方法) 的工作方式, 而不必担心有没有对外界造成干扰.
喜欢就推荐评论, 因为你的参与是我在写作道路上的最强动力.
来源: https://www.cnblogs.com/qing-gee/p/10042173.html