gpt4 book ai didi

design-principles - 里氏替换原则 - 没有重写/虚拟方法?

转载 作者:行者123 更新时间:2023-12-03 05:48:16 27 4
gpt4 key购买 nike

我对里氏替换原则的理解是,基类的某些属性是正确的,或者基类的某些实现行为对于派生类也应该是正确的。

我想这意味着当在基类中定义方法时,永远不应该在派生类中重写该方法 - 因为那时替换基类而不是派生类会产生不同的结果。我想这也意味着,拥有(非纯)虚拟方法是一件坏事?

我想我可能对原理理解有误。如果我不这样做,我就不明白为什么这个原则是好的实践。谁可以给我解释一下这个?谢谢

最佳答案

里氏替换原则完全允许子类重写基类中的方法。

这可能过于简化了,但我记得它是“子类应该不需要更多, promise 也不会更少”

如果客户端使用父类(super class) ABC使用方法something(int i) ,那么客户端应该能够替换 ABC 的任何子类没有什么问题。与其从变量类型的角度来考虑这个问题,不如从前置条件和后置条件的角度来考虑它。

如果我们的something() ABC中的方法上面的基类有一个宽松的前提条件,允许任何整数,然后是 ABC 的所有子类必须还允许任何整数。子类GreenABC不允许向 something() 添加额外的前提条件要求参数为整数的方法。这将违反里氏替换原则(即需要更多)。因此,如果客户端使用子类 BlueABC并将负整数传递给 something()如果我们需要切换到GreenABC,客户端不会中断。 .

相反,如果基数 ABCsomething()方法有一个后置条件 - 例如保证它永远不会返回零值 - 那么所有子类也必须遵守相同的后置条件,否则它们违反了里氏替换原则(即, promise 较少)。

我希望这会有所帮助。

关于design-principles - 里氏替换原则 - 没有重写/虚拟方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1735137/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com