对象的基本定义
面向对象方式将问题空间中的元素以及其在解空间中的标识称为“对象”。这种想法的实质是:**程序可以通过添加新类型的对象使自身适用于某个特定问题。**因此,阅读面向对象的解决问题的代码时,就是阅读问题的表述。
面向对象程序设计方式会有如下五个基本特性:
- 万物皆对象。将对象视为奇特的变量,可以存储数据,同时可以对于自身执行操作
- 程序是对象的集合,对象之间通过发送消息来告知彼此所要做的
- 可以通过创建包含现有对象的包的方式来创建新类型的对象
- 每个对象都拥有其类型。也就是说:每个对象都是某个类的一个实例
- 某一特定类型的所有对象都可以接收同样的消息。
接口
接口是什么,为什么需要接口?
每个对象都只能满足某些请求,这些请求由对象的接口所定义,决定接口的就是类(class)。接口确定了对某一个特定对象所能发出的请求,在类中,每一个可能的请求都有一个方法与之相关联,当对象发送请求时,该关联方法被调用。
访问控制(封装)
为什么需要访问控制?
访问控制是对类中变量访问权限的一种权限控制机制。可以帮助开发者避免使用者触及他们不需要或不应该触及的部分,同时可以使开发者改变类内部的工作方式时不用担心影响到使用者。
复用具体实现(组合和继承)
- 组合
- 继承
在创建了一个类之后,即使另一个新类与其具有相似的功能,你还是得重新创建一个新类,如何避免?
- 使用继承。继承以原有的类为基础(基类),复制它,然后通过添加和修改这个副本来创建新类(导出类)。导出类和基类之间的区别会主要来源于在导出类中添加的属性、方法以及导出类覆写的基类方法。
多态
面向对象语言为什么能做到多态?
- 面向对象程序设计语言使用后期绑定(动态绑定),当向对象发送消息时,被调用的代码直到运行时才能确定。编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查。Java 使用一小段特殊的代码来替代绝对地址调用。根据这段代码,每一个对象都可以具有不同的行为表现。
单根继承结构
在 Java 中所有的类最终都继承自单一的基类 Object。
总结
面向对象程序设计将问题的元素以及解空间抽象为“对象”。通过类对于对象的接口、方法、访问权限以及外部关系进行限制。同时,为了复用类并方便使用其子类,产生了组合和继承、多态当方式。前者帮助开发者复用基类,后者帮助开发者可以使用尽可能少的代码解决基类及其子类调用的问题。