JAVA001对象导论06

来源:互联网 发布:2017 淘宝 我的空间 编辑:程序博客网 时间:2024/05/16 14:32

继承

以现有的类为基础,复制它,然后通过添加和修改这个副本来创建新类

当源类(被称为基导出类、超类或父类)发生变动时,被修改的副本(被称为导出类、继承类或子类)也会反映出这些变动。

类型不仅仅只是描述了作用于一个对象集合上的约束条件,同时还有与其他类型之间的关系。

两个类型可以有相同的特性和行为,但是其中一个类型可能比另一个含有更多的特性,并且可以处理更多的消息(或以不同的方式来处理消息)。

一个基类型包含其所有导出类型所共享的特性和行为。

可以创建一个基类型来表示系统中某些对象的核心概念,从基类型中导出其他类型,来表示此核心可以被实现的各种不同方式。

可以通过使用继承来构建一个类型层次结构,以此来表示待求解的某种类型的问题。

类型层次结构同时体现相似性和差异性(exp.几何形)

当继承现有类型时,也就创造了新的类型。这个新的类型不仅包括现有类型的所有成员(尽管private成员被隐藏了起来,并且不可访问),并复制了基类的接口。即所有可以发送给基类对象的消息同时也可以发送给导出类对象。由于通过发送给类的消息的类型可知类的类型,意味着导出类与基类具有相同的类型。

通过继承而产生的类型等价性是理解面向对象程序设计方法内涵的重要门槛。

由于基类和导出类具有相同的基础接口,所以伴随此接口的必定有某些具体实现。即当对象接收到特定消息时,必须有某些代码去执行。

使基类与导出类产生差异的方法:

    直接在导出类中添加新方法。意味着基类不能直接满足所有需求,因此必须添加更多的方法;(以extends关键字表示继承)

    覆盖(overriding)。要想覆盖某个方法,可以直接在导出类中创建该方法的新定义。


“是一个”与“像是一个”关系

  纯粹替代(替代原则):继承只覆盖基类的方法,而并不添加在基类中没有的新方法,意味着导出类和基类是完全相同的类型,因为它们具有完全相同的接口。这种情况下的基类与导出类之间的关系称为is-a(是一个)关系;

  在导出类型中添加新的接口元素,这样就扩展了接口,这个新的类型仍然可以替代基类,但是这种替代并不完美,因为基类无法访问新添加的方法。is-like-a(像是一个)关系。

    

0 0