通过接口的方法从超类之中提取fly()和quack()方法

通过implement不同的接口表示不同的子类拥有的不同的行为。即使能够满足现实之中各个子类的实际情况的需要，但在代码维护上有缺陷：
假设存在48个继承Duck的子类，那么每一个子类的行为都需要定义过去，重复的代码会变得很多。
调整包结构+当前状况总结

使用Flyable接口和Quackable接口似乎能够解决不同子类模型具有不同行为的情况，但是Java接口不具有实现代码，继承接口不能实现代码复用；这意味着每当修改某个行为，必须向下追踪到每一个拥有此行为的类中并进行修改。

解决的思路是，将会变化的部分取出并封装起来，以便以后可以去那故意的改动或扩充此部分，而不影响不需要变化的其他部分。

也就是说，将鸭子的行为从Duck中取出并进行封装，根据不同的类进行分配。