【发布时间】: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