Java的Interport和Haskell的类型类:差异和相似之处?
当我学习Haskell时,我注意到它的类型类,这应该是起源于Haskell的伟大发明。
但是,在维基百科页面中的类型类:
程序员通过指定一组函数或常量名称及其各自的类型来定义类型类,这些函数或常量名称必须存在于属于该类的每个类型中。
这对我来说似乎与Java的接口相当接近(引用维基百科的接口(Java)页面):
Java 编程语言中的接口是一种抽象类型,用于指定类必须实现的接口(在术语的泛型意义上)。
这两者看起来非常相似:类型类限制类型的行为,而接口限制类的行为。
我想知道Haskell中的类型类和Java中的接口之间有什么区别和相似之处,或者它们根本不同?
编辑:我注意到,即使 haskell.org 承认它们是相似的。如果它们如此相似(或者它们是如此相似?),那么为什么类型类被如此炒作对待呢?
更多编辑:哇,这么多很棒的答案!我想我必须让社区决定哪个是最好的。然而,在阅读答案时,他们似乎都只是说“typeclass可以做很多事情,而接口不能或必须处理泛型”。我不禁想知道,接口可以做些什么,而类型类却不能?另外,我注意到维基百科声称typeclass最初是在1989年的论文*“如何使临时多态性不那么临时”中发明的,而Haskell仍然处于摇篮中,而Java项目始于1991年,并于1995年首次发布。因此,也许不是类型类类似于接口,而是相反,接口受到类型类的影响?是否有任何文件/论文支持或反驳这一点?感谢所有的答案,它们都非常有启发性!
感谢所有输入!