JAVA001对象导论07

来源:互联网 发布:python datatime 编辑:程序博客网 时间:2024/05/17 05:07

伴随多态的可互换对象

  泛化(generic)

  添加新类型是扩展一个面向对象程序以便处理新情况的最常用方式。

  通过导出新的子类型而轻松扩展设计的能力是对该公进行封装的基本方式之一。(极大地改善设计、降低软件维护的代价)

非面向对象编程的编译器产生的函数调用会引起前期绑定,意味着编译器将产生对一个具体函数名字的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址。

在OOP中,程序直到运行时才能够确定代码的地址,所以当消息发送到一个泛化对象时,必须采用其他的机制。后期绑定,当向对象发送消息时,被调用的代码直到运行时才能确定。编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查(无法提供此类保证的语言被称为是弱类型的),但是并不知道将被执行的确切代码。

为了执行后期绑定,JAVA使用一小段特殊的代码来替代绝对地址调用。这段代码使用在对象中存储的信息来计算方法体的地址。根据这一小段代码的内容,每一个对象都可以具有不同的行为表现。当向一个对象发送消息时,该对象就能够知道对这条消息应该做些什么。

在JAVA中,动态绑定是默认行为,不需要添加额外的关键字来实现多态。

把将导出类看做是它的基类的过程称为向上转型(upcasting)。

当向一个对象发送消息时,即使涉及向上转型,该对象也知道要执行什么样的正确行为。

0 0