“纯粹”的面向对象程序设计方法

(1) 所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。理论上讲,可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象。

(2) 程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。为了向对象发出请求,需向那个对象“发送一条消息”。更具体地讲,可将消息想象为一个调用请求,它调用的是从属于目标对象的一个子例程或函数。

(3) 每个对象都有自己的存储空间,可容纳其他对象。或者说,通过封装现有对象,可制作出新型对象。所以,尽管对象的概念非常简单,但在程序中却可达到任意高的复杂程度。

(4) 每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,“类”(Class)是“类型”(Type)的同义词。一个类最重要的特征就是“能将什么消息发给它?”。

(5) 同一类所有对象都能接收相同的消息。这实际是别有含义的一种说法,大家不久便能理解。由于类型为“圆”(Circle)的一个对象也属于类型为“形状”(Shape)的一个对象,所以一个圆完全能接收形状消息。这意味着可让程序代码统一指挥“形状”,令其自动控制所有符合“形状”描述的对象,其中自然包括“圆”。这一特性称为对象的“可替换性”,是OOP最重要的概念之一。

对象的接口

“接口”(Interface)规定了可对一个特定的对象发出哪些请求。然而,必须在某个地方存在着一些代码,以便满足这些请求。这些代码与那些隐藏起来的数据便叫作“隐藏的实现”。控制程序员对对象内部访问的原因主要有二:(1)防止外部程序员接触到他们不该接触的东西,比如内部数据;(2)允许库设计人员修改内部结构,而不需要担心它对外部客户程序员使用的影响。

Java有三个显式的关键字private,protected,public和一个隐式的关键字friendly。它们在Java中的作用跟其它语言中的关键字类似,在此不再赘述。

继承:重新使用接口

当我们需要新建一个类,它拥有一个已有的类的所有对象并实现了一个已有类的所有功能,这样的话我们可以采用继承的方法来创建一个新类,用这个新类来继承已有类。继承不是完全“克隆”,而是在“克隆”的基础上进行扩展和修改。Java中继承是通过extends关键字来实现的。

使用继承时,相当于创建了一个新类。这个新类不仅包含了现有类型的所有成员(尽管private成员被隐藏起来,且不能访问),但更重要的是,它复制了基础类的接口。

将子类和父类区分开来一般有两种方法:(1)为子类添加新的功能(函数);(2)在子类中改变基础类中现有函数的实现,这相当于是在子类中对基础类中已有的东西进行修改,从而使得子类与基础类有不同的实现,也就是“尽管使用的函数接口未变,但是它的新版本具有不同的表现”。

等价与类似的关系

继承并不是只改变原基础类中的函数,否则的话继承的类与基础类就是完全相同的类型。这样的话可以认为基础类和衍生类具有“等价”关系。但在很多情况下,我们需要在新类型中加入新的接口元素,这时不仅扩展了接口,也创建了而一个新的类型,这种新类型仍然可以替换成基础类型,但是这种替换不是完美的,因为不可以在基础类中访问新的函数。这种关系就称为“类似”关系,它指的是新类型中拥有旧类型的接口,但是也包含了新的函数。

对象的创建和存在时间

针对对象的创建以及存在时间,不同的编程语言有不同的处理方式:(1)C++允许程序员做出选择,存储和存在时间可以在编写程序的时决定,只需将对象放在堆栈或者静态存储区即可。这种方法的好处是运行速度快,缺点是缺乏灵活性。(2)在一个内存池中动态创建对象,该内存池亦叫“堆”或者“内存堆”。若采用这种方式,除非进入运行期,否则根本不知道到底需要多少个对象,也不知道它们的存在时间有多长,以及准确的类型是什么。这些参数都在程序正式运行时才决定的。若需一个新对象,只需在需要它的时候在内存堆里简单地创建它即可。在内存堆里分配存储空间的时间比在堆栈里创建的时间长得多(在堆栈里创建存储空间一般只需要一个简单的指令,将堆栈指针向下或向下移动即可)。由于存储空间的管理是运行期间动态进行的,所以在内存堆里分配存储空间的时间比在堆栈里创建的时间长得多(在堆栈里创建存储空间一般只需要一个简单的指令,将堆栈指针向下或向下移动即可)。

单根结构

在面向对象的程序设计中,由于C++的引入而显得尤为突出的一个问题是:所有类最终是否都应从单独一个基础类继承。在Java中(与其他几乎所有OOP语言一样),对这个问题的答案都是肯定的,这种“单根结构”具有许多方面的优点。单根结构中的所有对象都有一个通用接口,所以它们最终都属于相同的类型。

转载于:https://www.cnblogs.com/superhuake/archive/2012/06/25/2562849.html

Think in Java读书笔记--对象入门相关推荐

  1. head first java读书笔记

    head first java读书笔记 1. 基本信息 页数:689 阅读起止日期:20170104-20170215 2. 标签 Java入门 3. 价值 8分 4. 主题 使用面向对象的思路介绍J ...

  2. Java读书笔记(4)-多线程(二)

    Java读书笔记(4)-多线程(二) 2016-1-2 线程通信 传统的线程通信 Object类提供了wait(),notify()和notifyAll三个方法 适用情况:synchronized修饰 ...

  3. think in java 读书笔记 2 —— 套接字

    目录 think in java 读书笔记 1 --移位 think in java 读书笔记 2 -- 套接字 think in java 读书笔记 3 -- 数据报 概要 1. 套接字基本知识 2 ...

  4. 读书笔记——数据压缩入门(柯尔特·麦克安利斯)下

    文章目录 数据压缩入门汇总 第九章 数据建模 9.1 马尔科夫链 9.2 部分匹配预测算法PPM 9.2.1 单词查找树 9.2.2 字符的压缩 9.2.3 选择一个合理的N值 9.2.4 处理未知的 ...

  5. 读书笔记——数据压缩入门(柯尔特·麦克安利斯)中

    文章目录 数据压缩入门汇总 第六章 自适应统计编码 6.1 位置对熵的重要性 6.2 自适应VLC编码 6.2.1 动态创建VLC表 6.2.2 字面值 6.2.3 重置 6.2.4 何时重置 6.3 ...

  6. Java读书笔记(8)-单例模式

    Java读书笔记(8)-单例模式 今天在阅读<Effective Java 2>第3条时,获知一种使用枚举enum实现单例模式的新方法,然而书上并没有就此展开深入说明,于是上网查阅了一些资 ...

  7. 读书笔记 -- 算法入门

    14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...

  8. Effective Java读书笔记(二)

    Effective Java 读书笔记 (二) 创建和销毁对象 遇到多个构造器参数时要考虑使用构建器 创建和销毁对象 何时以及如何创建对象? 何时以及如何避免创建对象? 如何确保它们能够适时地销毁? ...

  9. Effective Java 读书笔记(七):通用程序设计

    Effective Java 读书笔记七通用程序设计 将局部变量的作用域最小化 for-each 循环优于传统的 for 循环 了解和使用类库 如果需要精确的答案请避免使用 float 和 doubl ...

  10. #java读书笔记#面向对象2

    上一篇java读书系列笔记文章:#java读书笔记#面向对象1 14.Math类的使用(重点) (1)数学操作类:该类没有构造函数,方法均为静态的 (2)掌握内容 A:成员变量 **E:比任何其他值都 ...

最新文章

  1. 有无符号的整数、二进制
  2. ​20210716未来智能实验室收录资料
  3. matplotlib 一张图多个图,如何在Matplotlib中绘制同一个图上的多个函数?
  4. Task Schedule
  5. 深入理解Linux异步I/O框架 io_uring
  6. 转:模态对话框的支持 (IE,Firefox,Chrome)
  7. python预测发展趋势_Python预测算法哪家强?权游龙妈是生还是凉凉?
  8. 新基建下 AI 算力市场崛起,华为凭什么从中分一杯羹?
  9. 千兆云路由器Dlink850L10个0Day漏洞成筛子 PoC满天飞 随便拿Root权限
  10. 关于三角函数图像的思考
  11. 如何生成唯一的Android设备ID?
  12. 大数据CAP原则(CAP定理)、BASE理论
  13. openwrt定时任务 2021-10-08
  14. Mysql从入门到入魔——5. 聚集、分组、子查询
  15. 结构性用工荒也是用工荒
  16. C# 微信企业号--发送消息
  17. 深入Java集合系列之七:Hashtable
  18. 基于51单片机密码锁数码管显示步进电机开锁设计
  19. 【优化求解】基于matlab禁忌搜索算法求解函数极值问题【含Matlab源码 1204期】
  20. shell批量修改文件名

热门文章

  1. go语言中金币分配训练--pm
  2. JavaScript:在JS中截取字符串的方法
  3. python 报了错TypeError: sequence item 0: expected str instance, int found
  4. 苹果亮度自动调节怎么关闭_iPhone 总是自动亮屏,该怎么关闭?
  5. Jackson解析XML
  6. training test validation 各有其用,实践中有了体会
  7. POJ_1753解答过程的理解
  8. SQL Server 字段类型Char Varchar 比较
  9. 基于微服务架构的门户平台改造的研究
  10. Mysql优化(出自官方文档) - 第七篇