【问题标题】:Which languages "have subclassing but no inheritance"?哪些语言“有子类化但没有继承”?
【发布时间】:2014-06-23 08:08:24
【问题描述】:

来自java课程的pdf:http://www.ccs.neu.edu/home/riccardo/courses/csu370-fa07/lect4.pdf

上面写着:

对于那些在国内跟随的人,让我强调子类化不是继承。我们将在课程后面看到继承。

当然,子类化和继承是相关的。正如我们将看到的,继承是一种代码重用机制,可以让您在定义子类时轻松重用代码。但是即使你没有继承,子类化也是有意义的。

(确实,有些语言有子类化但没有继承,至少不像Java实现那样继承。)

子类化是类的属性,是 Java 类型系统的一部分。 Java 使用子类化来确定可以在对象上调用哪些方法,并在对象不提供给定方法时在编译时返回错误。

我想知道哪些语言有子类化但没有继承,至少没有像 Java 实现的继承? (由于我不是很了解概念,所以如果我能用一些实际的语言看到它,那就更清楚了)

【问题讨论】:

  • 我不明白这种语言的意义,但理论上它是可能的。我只能想象一些较低级别(并且鲜为人知的)语言有这种行为。
  • 课程作者至少应该引用一个示例。不这样做会使括号无法通过鼬鼠单词测试。我从未见过具有子类化但不具有继承性的语言类型系统,但不是语言。例如,COM 有一个子类化的概念,但它与语言无关,并且在 COM 本身中并不直接支持继承(我不认为)。
  • 我想这也取决于您对“语言”的定义。在上面,我在想“语言”=“编程语言”,但这个词比这更笼统。例如,“接口定义语言”经常称自己为“语言”,但只关心指定接口;他们根本没有实现(因此没有继承,只是子类化)。但 HTML 也称自己为“语言”,但显然不是一种编程语言。
  • “我想知道哪些语言有子类化但没有继承,至少没有像 Java 实现的继承?” 我不能给你一个例子,所以这不是一个答案,但我可以给你一个相反的例子:JavaScript 有继承但没有子类化。我认为许多基于原型继承的语言都是如此(但我真的只知道一种)。

标签: java inheritance subclass


【解决方案1】:

这是没有区别的区别。显然,只有当他使用“继承”一词时,他才在谈论方法的继承。他没有以Wegner87 引入的规范方式使用该术语,这与子类化密不可分:

继承:一个类可以从“超类”继承操作,也可以由“子类”继承其操作。由操作“C new”创建的类 C 的对象将 C 作为其“基类”,并且可以使用在其基类中定义的操作以及在超类中定义的操作。

CS 老师经常有奇怪的想法。这就是其中之一。

【讨论】:

  • @downvoter 拍信使不好。使用Emeritus Professsor Peter Wegner
  • 我认为问题不在于 Wegner 所说的内容,而在于您如何应用它。您已经说过这是没有区别的区别,但显然存在 区别,因为我们有具有继承但没有子类的语言。例如,至少有一些原型语言。 (JavaScript 可能是最著名的例子之一,我相信 Self 是第一个。)如果我们可以在没有子类的情况下进行继承(根本没有类),那么显然除了区别之外还有区别。
  • 但这确实首先要归咎于 OP 链接课程中的观察质量差。在没有支持的情况下发表这样的评论简直是糟糕的做法。
  • @T.J.Crowder 我真的没有兴趣推测未说明的原因。我完全愿意辩论反对我的和Professor Wegner's 的其他观点,以及反对我的其他引用,但拒绝一个完整的答案,并引用该学科的基础论文没有 解释很奇怪。和糟糕的做法。
  • @T.J.Crowder 鉴于 Wegner 的定义,这个问题毫无意义,这样说就是一个答案。
猜你喜欢
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 2023-03-23
  • 2014-05-30
  • 1970-01-01
  • 2020-02-09
相关资源
最近更新 更多