提到动态语言不得不提“鸭子类型”。鸭子类型(duck type)这个概念指的是一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。理解它,也可以帮助理解动态语言:
在静态语言中,你需要定义一个“嘎嘎叫”的接口,让鸭子类实现自这个接口,然后在逻辑中引用实现自这个接口的对象并且调用这个嘎嘎叫的方法,虽说程序在运行时实现了多态,在编译期间编译器并不知道这个实现自嘎嘎叫接口的对象到底是什么类型的,但是它依然知道这个对象一定是实现了这个接口,一定是一个可以“嘎嘎叫”的对象。
但是在动态语言中,你根本不需要定义这样的接口(“不需要”,而不是“不可以”),只需要在你的逻辑里面调用传入对象的“嘎嘎叫”方法就好了,不管这个对象是什么,如果这个对象可以嘎嘎叫,那么程序就顺利执行下去;反之,一个运行时异常会被抛出。
原文:http://www.cnblogs.com/abapscript/p/5035240.html