Traits vs. Interfaces vs. Mixins?

时间:2013-06-03 23:09:39

标签: ruby scala oop programming-languages

有什么相似之处&特征,混合和界面之间的差异。我试图更深入地理解这些概念,但我不知道足够的编程语言来实现这些功能,以真正理解相似之处和不同之处。

对于每个特征,混合和接口

  • 解决的问题是什么?
  • 概念的定义是否在编程语言中保持一致?
  • 它和其他人有什么相似之处?
  • 它和其他人之间有什么区别?

1 个答案:

答案 0 :(得分:10)

Object之外,Java中的每个reference type都派生自一个超类。

顺便说一句,Java类可以实现零个或多个接口。

一般来说,接口是描述实现类被强制使用的方法的契约,但不直接提供实现。

换句话说,Java类必须遵守其合同,从而实现其声明要实现的接口提供的方法签名。

界面构成一种类型。因此,您可以传递参数并从声明为接口类型的方法返回值,这要求参数和返回类型实现特定方法,而不必为它们提供具体实现。

这为几种抽象模式设置了基础,例如dependency injection

Scala本身具有特征。 Traits为您提供Java接口的所有功能,它们的重要区别在于它们可以包含方法实现和变量。 Traits只是一次实现方法的智能方法 - 通过这种方式 - 将这些方法分配到所有扩展特征的类中。 与Java类的接口类似,您可以将多个特征混合到Scala类中。

因为我没有Ruby背景,所以我会指出David Pollak的“Beginning Scala”(amazon link)的摘录:

  

Ruby有mixins,它是可以混合到任何类中的方法集合。因为Ruby没有静态类型,并且没有办法声明方法参数的类型,所以没有合理的方法来使用mixins来定义类似接口的契约。 Ruby mixins提供了一种机制,用于将代码组合成类,但不是用于定义或实施参数类型的机制。

接口可以比本文中描述的更多;由于主题可能非常广泛,我建议你在三个方向的每个方向进行更多调查,而如果你甚至有Java背景,Scala和因此特性是可以负担得起的。