我读了“SOLID”原则的解释。以下是'L'部分的解释:
程序中的对象应该可以替换为它们的实例 子类型而不改变该程序的正确性
例如,我有MYViewController : UIViewController
当我覆盖viewDidLoad
时,这意味着我更改了基本视图控制器的逻辑。对?这是否意味着我改变该程序的正确性?
或者我误解了这一点?
答案 0 :(得分:4)
您覆盖viewDidLoad
这一事实并不构成违反Liskov替换原则(LSP)。 (子类的功能通常是扩展超类的行为。)实际上反过来说,如果你在子类中实现行为使得它不能再用于引用基类的情况。
但LSP并不是我们正在考虑完全不同的类(例如冰淇淋对象; lol)的情况。我们通常关注的是我们处理实际子类的位置,但是不能再替换对其基类的引用。
当覆盖方法时,如果代码适当地调用super
实现,它通常满足LSP。关于viewDidLoad
的问题,您总是希望在这种情况下致电super
。