6

看了维基百科的文章后,我对“子类型”这个词不熟悉。

我用 Liskov 替换的意思是,如果你有一个采用 的方法Animal,你应该能够在没有任何意外副作用Cat的情况下传入 a 或Animalwhere 。Cat : Animal

这就是 Liskov 替换所指的吗?

4

2 回答 2

3

确切地。任何带有 Animal 的东西都应该能够带有 Dog、Cat 和子类(品种,如果你喜欢的话)。这些方法将是兼容的。

还要注意,在子类型中不能加强前置条件,也不能削弱后置条件。否则,您可以插入特定的子类型,这会中断,因为周围的代码施加了子类无法容忍的某些先决条件。这在实践中可能很难实现 - 有关更多信息,请参阅圆/椭圆问题

于 2013-02-06T13:11:53.983 回答
0

是的。Likov 的替换原则指出,如果程序模块正在使用 Base 类,那么对 Base 类的引用可以替换为 Derived 类,而不会影响程序模块的功能。

于 2013-02-06T13:11:10.767 回答