多态
多态就是在子类中覆写父类的方法
鸭子类型
我们可以使用一个函数 makeRun() 来访问不同 Animal 子类中的相同方法。
但其实对于上面的 makeRun() 函数来说,传入的参数并不一定需要是 Animal 类型的,只需要保证传入的对象有一个 run() 方法即可,如下面代码所示。
这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。