《Think in Java》第一章:对象导论之访问控制
theme: channing-cyan
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
创建抽象数据类型(类)是面向对象程序设计的基本概念之一
创建某一类型的变量(即对象实例),之后操作这些变量(使用对象.调用)
面向对象的挑战之一就是在问题空间的元素和解空间的对象建立映射关系
每个类所能接受的消息是不一样的,即某个类只能满足部分需求,而能满足哪些需求能接受哪些消息是接口所定义的。 向某个对象发送消息(调用方法),执行这个方法对应代码。
解决问题先考虑再写代码
将对象想象为“服务提供者”,解决问题之前先考虑:什么样的对象可以马上解决问题?这些对象能提供哪些服务,这些对象需要利用哪些对象能更好更快的解决问题,对象应该只关心如何做好分内的事而不去考虑其他事情(内聚)
访问控制
可以将程序员分为两种,一种是创建新类型的程序员(开发sdk的),另外一种是使用这些新类型的程序员(使用sdk的)。
使用sdk的需要做好这些:收集各种用来实现快速应用开发的类
开发sdk的需要做好这些:只暴露必要的部分,隐藏其他部分。隐藏的部分是为了防止使用sdk的去触碰SDK内部"脆弱"的部分(之前组内贯彻对于具体实现隐藏想法的目的是怕卖不了更多钱哈哈哈,如果程序很简单使用sdk的一看就明白是如何做到的,那么客户会觉得很吃亏也就卖不出去)ps:虽然到现在也没有人买
好了,差点带偏了,这个目的不单单是为了卖更多的钱,最重要的是被隐藏的这些部分**它们很容易被粗心的人或不知情的客户“毁坏”,因此将这实现隐藏会减少程序的bug。
访问控制出现的原因
看完上面的说明
第一个原因就是:让SDK使用者无法触及它们不该触及的部分
第二个原因:允许SDK的开发人员之后可以修改其内部实现,这些实现部分是SDK人员开发的,不对外面暴露因此修改前后对于使用者来说没有什么区别,但是其内部实现已经换了另外一种方式。使用者只需知道他能够提供什么功能即可,无需过多关心实现。(ps:有些时候我们可能必须要看其源码实现,这就需要SDK的开发人员去衡量了)
总结下这几个权限控制符: public:任何人都可以访问
private:只允许类型创建者和类型内部方法访问
procoted:比private少了一个限制:其子类也可以访问
默认的修饰符:包访问权限,只有同一个包中才可以共享
日常开发过程中使用java我们确实会忽略这些修饰符,kotlin则默认private,这也是使用kotlin的一个好处,开发者在放宽权限时可以有个潜意识认识到这些限制。
相关文章
- 每天20分支之java grpc的metadata
- java的”HelloWorld”代码解释「建议收藏」
- java list去重_JAVA基础-List去重的6种方式[通俗易懂]
- java 取余和取整_Java取整、取余
- java中applet是什么意思_Java Applet与Java Application的区别
- java集合类面试题_Java集合类相关面试题
- 笔记《Thinking in Java》第2章 一切都是对象[通俗易懂]
- JAVA队列( Queue ) 详解[通俗易懂]
- 关于jmeter客户端实现中HttpClient4与Java的区别
- 代码审计 | Java EE 基础知识
- Java基础入门笔记08——文件流,IO流,FileIputStream类,FileOutputStream类,缓冲流,转换流,标准输入输出流,打印流,数据流,对象流,随机存储流
- java lang illegalargument_servlet内置对象
- 【测开技能】Java系列(二十 )初识面向对象编程
- ringbuffer java例子_Java RingBuffer.publish方法代碼示例「建议收藏」
- Java项目分享-基于 SpringBoot + Vue的网页版聊天室
- centos7 java -verison Error: Could not create the Java Virtual Machine.
- java设计模式之观察者模式详解架构师
- 运行参数Linux 下修改 Java 运行参数的指南(linux修改java)
- 实现使用Java实现Redis消息队列(redis消息队列java)
- Java编程操作Oracle数据库(java操作oracle)
- Oracle与Java的连接:揭秘数据库开发技术之间的神奇联系(oracle连接java)
- 连接高效完成Java面试:掌握Oracle连接知识(java面试oracle)
- Java程序员如何优雅操作Redis(java操作redis)
- 使用Redis存储Java对象(redis存java对象)
- 时间Java中设置Redis的过期时间:有效解决方案(redisjava过期)
- 使用Linux安装Java轻松搞定!(linux java安装)
- Java中的访问修饰符详细解析