1

我正在阅读的书说,当您覆盖子类中的方法时,这意味着运行时多态性。有没有像编译时多态性这样的东西?我认为简单的继承发生在编译时,然后多态性是运行时。

4

2 回答 2

2

他们暗示方法重载,有时称为编译时多态性

实际上,方法重载允许您根据作为参数传入的对象类型调用不同的代码段。重载在编译时解决,因此重载机制可以被认为是编译时多态性。

于 2012-04-30T00:13:30.990 回答
1

Lucca Cardelli 有一篇很棒的文章,名为On Understanding Types, Data Abstraction and Polymorphism,非常详细地解释了您的问题的答案。

您在问题中提到的称为临时多态性,包括方法重载和类型内聚(如运算符重载中的那些),这两个发生在编译时。另一方面,为给定方法选择正确的实现发生在运行时,这是所谓的参数或包含多态性的一部分。

但我很确定 Lucca Cardelli 会给你一个比我梦寐以求的更好的答案。

最近我在这个论坛上参加了另一个类似的问题,我提供了这两种多态性的一些例子。您可能想看一下,尽管我的印象是您可能已经知道了。

您可能还想阅读面向对象编程语言中的多态性

于 2012-04-30T00:22:46.793 回答