鸭子类型

动态语言.


当你看到一只鸟走起来像鸭子 游泳起来像鸭子 叫起来像鸭子 那么这只鸟就可以被称为鸭子.


在鸭子类型中不关注对象类型本身,而是它如何使用的.例如 

在不适用鸭子类型的语言中,我们可以编写一个函数,他接受一个类型为鸭子的对象,并调用它的走和叫方法.

在使用鸭子类型的语言中 这样的一个函数可以接受一个任意类型的对象,并调用它的走和叫方法.如何这些需要被调用的方法不存在,那么将引发一个运行时错误.


任何拥有这样正确的走和叫方法的对象都可被函数接受的这种行为 引出了上述表达.



接口是一种行为约束,它的实现者之间不要求具备共同性质,这是与对象继承最大的区别。在现实世界中,生物之间使用对象继承比较好描述,但非生物之间,用接口描述就更好。比如,动物->猫->波斯猫 这是一种继承关系;而 水龙头<->自来水管道 之间,显然需要一种接口标准,即一种工业标准,只要符合标准,两者就能结合。接口的概念在生活中无处不在,尤其是建筑、工业设计方面,接口规范至关重要。而这些,是无法使用对象继承来描述的。



版权声明:本文为jiangfangyuan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。