我正在阅读有关面向对象的编程语言的类的一些幻灯片,并逐步进入了type-subtype定义:
芭芭拉·利斯科夫(Barbara Liskov),“数据抽象和层次结构”,SIGPLAN Notices,
23,5(1988年5月):
然后再举一个例子:
现在...对我来说似乎应该是相反的:Point≤PositivePoint,因为我不能在使用带有负坐标的Point的程序中使用PositivePoint,而我可以相反。
我怀疑语法是Type ≤ Sub-type
还是Sub-Type ≤ Type
,但是该语句似乎更清楚了,那又是怎么了?
编辑
为了使事情变得更简单,问题是:
您能说PositivePoint
是Point
的子类型吗?
为什么?
第二次编辑
我在这里报告我在评论中写的内容,希望它可以使我的问题更清楚:
最佳答案
Liskov是正确的,PositivePoint≤Point,因为PositivePoint是对Point的改进。任何使用Point的代码也必须能够使用PositivePoint,因为总有可能Point的坐标始终为正。反之则不成立,因为使用PositivePoint的代码可能会在假设坐标始终为正的情况下运行,而用Point替换PositivePoint将破坏该假设。
请注意,她并不是说PositivePoint可以代替Point,而只是在需要Point的地方可以使用PositivePoint。