首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么ADT是好的,而继承是坏的?

为什么ADT是好的,而继承是坏的?
EN

Stack Overflow用户
提问于 2010-07-17 22:53:29
回答 4查看 3.1K关注 0票数 24

我是一个长期的面向对象程序员和函数式编程新手。从我的经验来看,代数数据类型对我来说只是一个继承的特例,你只有一个层次结构,并且超类不能扩展到模块之外。

所以我的问题(可能很愚蠢)是:如果ADT只是继承的一种特殊情况(同样,这个假设可能是错误的;请在这种情况下纠正我),那么为什么继承会受到所有的批评,而ADT会得到所有的赞扬?

谢谢。

EN

Stack Overflow用户

发布于 2010-07-18 02:59:11

根据我的经验,人们通常认为大多数面向对象语言实现的继承“不好”的地方不是继承本身,而是子类修改超类(方法覆盖)中定义的方法的行为,特别是在存在可变状态的情况下。这是真正的最后一部分,这是踢球。大多数面向对象语言将对象视为“封装状态”,这等同于允许对象内部状态的猖獗变化。因此,例如,当超类希望某个方法修改私有变量,但子类覆盖该方法来做完全不同的事情时,就会出现问题。这可能会引入编译器无能为力的细微bug。

请注意,在Haskell的子类多态性实现中,不允许使用可变状态,因此您不会遇到这样的问题。

另请参见this objection到子类型的概念。

票数 9
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3271974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档