Liskov's Substitution Principle
Learn about Liskov's substitution principle (LSP) in software design.
Liskov's substitution principle (LSP) states that there is a series of properties that an object type must hold to preserve the reliability of its design.
The main idea behind LSP is that, for any class, a client should be able to use any of its subtypes indistinguishably, without even noticing, and therefore without compromising the expected behavior at runtime. That means that clients are completely isolated and unaware of changes in the class hierarchy.
More formally, this is the original definition (
This can be understood with the help of a generic diagram such as the one below. Imagine that there is some client class that requires (includes) objects of another type. Generally speaking, we will want this client to interact with objects of some type, namely, it will work through an interface.
Now, this type might as well be just a generic interface definition, an abstract class or an interface, not a class with the behavior itself. There may be several subclasses extending this type (described in the diagram below with the name Subtype
, up to N
). The idea behind this principle is that if the hierarchy is correctly implemented, the clientClass
has to be able to work with instances of any of the subclasses without even noticing. These objects should be interchangeable, as the diagram shows.
Get hands-on with 1400+ tech skills courses.