Классы нормальных типов предназначены для интерфейсов, как классы многопараметрических типов для множественной диспетчеризации в ООП; Вы получаете соответствующее увеличение мощности как языка программирования, так и головной боли программиста.
я изучал Haskell, я заметил, что еготип класс, который, как предполагается, является великим изобретением, которое возникло у Хаскелла.
Однако встраница Википедии по типу класса:
Программист определяет класс типов, определяя набор имен функций или констант вместе с их соответствующими типами, которые должны существовать для каждого типа, принадлежащего классу.
Который кажется довольно близко кИнтерфейс Java для меня (цитируяСтраница интерфейса Википедии (Java)):
Интерфейс в языке программирования Java - это абстрактный тип, который используется для указания интерфейса (в общем смысле этого термина), который должны реализовывать классы.
Эти два выглядят довольно похоже: класс типов ограничивает поведение типа, в то время как интерфейс ограничивает поведение класса.
Интересно, в чем различия и сходства между классом типов в Haskell и интерфейсом в Java, или, может быть, они принципиально отличаются?
РЕДАКТИРОВАТЬ: Я заметилдаже haskell.org признает, что они похожи, Если они так похожи (или они?), То почему класс типов трактуется с такой шумихой?
БОЛЬШЕ РЕДАКТИРОВАТЬ: Вау, так много отличных ответов! Думаю, мне придется позволить сообществу решить, какой из них лучший. Однако, читая ответы, все они, кажется, просто говорят, что«Есть много вещей, которые может сделать класс типов, в то время как интерфейс не может или должен справляться с обобщениями», Я не могу не задаваться вопросом, есть ли что-нибудьинтерфейсы могут делать, а классы типов - нет? Кроме того, я заметил, что Википедия утверждает, что класс типов был первоначально изобретен в газете 1989 года * «Как сделать специальный полиморфизм менее специальным», в то время как Haskell все еще находится в своей колыбели, в то время как проект Java был запущен в 1991 году и впервые выпущен в 1995 году. . Такможет быть, вместо того, чтобы класс типов был похож на интерфейсы, наоборот, на интерфейсы влиял класс типов? Существуют ли какие-либо документы / документы, подтверждающие или опровергающие это? Спасибо за все ответы, все они очень поучительны!
Спасибо за все вклады!