在语言无关的层面上,Mixin 只是为类添加功能,更适用于程序员方便和避免代码重复。一个抽象(基)类形成了 is-a 关系并允许多态性。继承被过度使用的一个原因是,在不真正支持 Mixin 的语言中,它是一种实现 Mixin 而不编写样板文件的简单方法。问题在于,你正在声明一个多态的 is-a 关系作为副作用,使你的 API 更加混乱,可能会增加歧义。因此,像 D 和 Ruby 这样的新语言支持 Mixin 作为本地特性,提供了一种方便的方式来向类添加一堆功能,而无需声明多态的 is-a 关系。