在Robert Martin的SOLID原则中,LSP是实现OCP的重要原则之一。
LSP规定:任何使用到子类的地方替换成父类都能正常运行,也就是说子类里面不能有,公有的且父类里面没有定义的方法。
但是考虑到现实情况,很多时候LSP无法得到保证
举个例子,在Java里,可以将接口分为两类,一类是行为接口。一类是标识型接口
行为接口比如people接口定义了人类不同行为,所有的人种都要实现这样的行为,行为接口属于对客观事物的一种抽象,这种情况下LSP是实现OCP的关键步骤
但是标识型接口不需要LSP的限制,比如Comparable,总不能要求实现Comparable的类只有compareTo一个公有方法吧
标识型接口只是赋予一个类特定的能力,以便在执行此能力的时候能统一口径,从来也不会有人会用这个接口来引用类Comparable c = new ...
所以LSP的应用还需认清接口的本质。