trait、mixin 和接口之间有什么异同。我正在尝试更深入地了解这些概念,但我对实现这些功能的编程语言了解不多,无法真正理解它们的异同。
对于每个特征、混合和接口
- 正在解决的问题是什么?
- 跨编程语言的概念定义是否一致?
- 它和其他的有什么相似之处?
- 它和其他的有什么区别?
trait、mixin 和接口之间有什么异同。我正在尝试更深入地了解这些概念,但我对实现这些功能的编程语言了解不多,无法真正理解它们的异同。
对于每个特征、混合和接口
Java 中的每个引用类型,除了Object
,都派生自一个单一的超类。
顺便说一下,Java 类可以实现零个或多个接口。
一般来说,接口是一种契约,它描述了实现类被迫拥有的方法,尽管没有直接提供实现。
换句话说,Java 类有义务遵守它的契约,从而实现它声明要实现的接口所提供的方法签名。
一个接口构成一个类型。因此,您可以传递参数并从声明为接口类型的方法中获得返回值,这要求参数和返回类型实现特定方法,而不必为它们提供具体实现。
这为几种抽象模式奠定了基础,例如依赖注入。
Scala 就其自身而言,具有特征。Traits 为您提供了 Java 接口的所有特性,其显着区别在于它们可以包含方法实现和变量。Traits 是一种只实现一次方法的聪明方法,并且通过这种方式将这些方法分发到扩展该 trait 的所有类中。就像 Java 类的接口一样,您可以将多个 trait 混合到一个 Scala 类中。
不过,由于我没有 Ruby 背景,我将向您指出 David Pollak 的“Beginning Scala”(亚马逊链接)的摘录:
Ruby 有 mixins,它们是可以混合到任何类中的方法的集合。因为 Ruby 没有静态类型,也没有办法声明方法参数的类型,所以没有合理的方式使用 mixins 来定义类似接口的协定。Ruby mixin 提供了一种将代码组合到类中的机制,但不提供定义或强制参数类型的机制。
接口可以做的甚至比这篇文章中描述的还要多;由于主题可能很广泛,我建议您在三个方向中的每一个方向上进行更多研究,而如果您甚至具有 Java 背景,Scala 和因此特性是可以学习的。