对象只公开了用户与之交互所需的接口,而与对象使用无关的细节能对其他对象隐藏。
继承
OO程序设计中最强大的一个特性可能就是代码重用。结构化设计从某种程度上提供了代码重用——你可以编写一个过程,然后根据需要使用多次。不过,OO设计则更进一步,允许通过组织类并抽取各个类的共性来定义类之间的关系,这不仅有利于代码重用,还可以实现更好的整体设计。继承(inheritance)是提供这种功能的一个主要途径。
继承允许类继承另一个类的属性和方法。这就允许通过抽取共同的属性和行为来创建全新的类。OO程序设计中主要的设计问题之一就是抽取不同类的共性。
实例化对象时,他包含该类本身的所有内容,还包括从其父类继承的所有内容。
超类和子类
超类(或父类)包含继承自该类的所有子类共同的属性和行为。
抽象
继承树可能会扩展得相当庞大。继承的强大之处就在于与其抽象和组织技术。
在大多数OO语言中,一个类只能有一个父类;不过,一个类可以有多个子类。
is-a 关系
考虑一个Shape例子,Circle、Square和Star都直接继承自Shape。这个关系通常称为一种is-a关系。
多态
多态(polymorphism)字面意思是多种形状。尽管多态与继承紧密相关。但通常被单独地看作面向对象技术最强大的特点。当想一个对象发送一个消息时,这个对象必须有一个定义的方法对这个消息作出响应。在继承层次结构中,所有子类都从其超类继承接口。不过,由于每个子类都是一个单独的实体,它们可能需要对同一个消息作出不同的响应。
覆盖(overriding)实际上是指将父类的一个实现替换为其子类的一个实现。
如果一个方法定义为abstract,子类就必须为这个方法提供一个实现。否则该子类本身也将成为一个抽象类。
构造函数
构造函数(constructor)。如果一个方法与所在类同名,而且没有提供任何返回类型,则这个方法就是一个特殊方法,称为构造函数。可以把构造函数认为是类的入口点,对象由此构建。构造函数非常适合完成初始化和准备工作。
组合
对象通常是由其他对象构建或组合而成的。这就是组合(composition)。
抽象
基于其他类来构建类只有两种方法:继承(is-a)和组合(has-a)。继承允许一个类从另一个类继承,这样能为公共类抽取属性和行为。
总结
-封装——将数据和行为封装到一个对象中,这是OO开发中非常重要的一点。一个对象同时包含其数据和行为,而且可以将某些部分对其他对象隐藏。 -继承——一个类可以从另一个类继承,并且可以利用超类定义的属性和方法。 -多态——多态是指类似的对象可以采用不同的方式对相同的消息作出响应。例如,你可能有一个包含多种形状的系统。小过,圆形、正方形和星形分别采用不同的方式绘制。通过使用多态,可以向以上各个形状发送相同的消息(如Draw),各形状则会负责自行完成绘制。 -组合——组合是指—个对象由其他对象构建而成。