【发布时间】:2016-11-19 03:43:49
【问题描述】:
x: expanded SOME_DEFERRED_CLASS 是不可能的,因为:
-
deferred类不能用于对象实例化。 -
expanded类型不允许polymorphism。
我是否遗漏了什么,或者我是对的吗?
【问题讨论】:
标签: polymorphism abstract-class instantiation eiffel
x: expanded SOME_DEFERRED_CLASS 是不可能的,因为:
deferred 类不能用于对象实例化。expanded 类型不允许polymorphism。我是否遗漏了什么,或者我是对的吗?
【问题讨论】:
标签: polymorphism abstract-class instantiation eiffel
x: expanded A_CLASS 是一种过时的语法。它不再受支持。
但是expanded 可以在类定义中使用。在这种情况下,正如您所引用的,不可能同时拥有延迟类和扩展类。
作为一个简单的规则,可以定义一个只有一个来自下一个列表的类:expanded、deferred、separate、frozen。
如果您希望“扩展”一个已经存在的实现,您只需要创建这个类的扩展继承者。查看 Eiffel 的内核库,您可以找到这样的示例(例如 INTEGER_32 - 扩展类 - 继承 INTEGER_32_REF)
【讨论】:
x: expanded A_CLASS 是一种过时的语法。它不再受支持。" ← 哇,我一点想法都没有!谢谢!顺便问一下,你从哪里找到这些信息的?您能否发布一个链接以供将来参考?
你是对的。推理可以改写如下:
因此,即使在技术上可能允许声明延迟扩展类型的实体,但它们不能被使用。
正如另一个答案中正确指出的那样,在现代 Eiffel 中,只能使用一个类标记来指示其状态,因此,在语法上不可能声明延迟扩展类或类型。但是,即使允许,也没有用。
编辑:
有两种一致性:直接和一般。直接一致性反映了父子关系:没有传递性或自反性规则,NONE 类型的特殊规则等。它基本上说明,如果类 C 继承自类 P,则类型C 在特定条件下符合 P 类型。条件排除了C展开的情况。
一般一致性使用直接一致性作为基本情况之一以及其他一些情况,例如自反性规则“类型符合自身”。因此,规则“没有类型直接符合扩展类型”仅仅意味着继承链接对于扩展类型无关紧要。但是由于自反性规则,扩展类型仍然符合自身。
所有这些细节都在注释“From 1”后面。更多信息请参见Standard ECMA-367(第 8.14 节)。
【讨论】:
P(父类)和C(子类),其中C继承自P:
P 和 C 不是扩展类,则类型 C 符合类型 P,但反之则不然。但是,如果 P 或 C(或两者)被扩展,则 C 类型都不会符合 P,反之亦然,因为 “没有类型直接符合扩展类型。”。跨度>