SOLID Principle
Single-responsiblity Principle
Open-closed Principle
Liskov Substitution Principle
Subclasses should be substitutable for their base classes.
Given that class B is a subclass of class A, we should be able to pass an instance of class B to any method that expects an instance of class A and the method should not give any weird output in that case.
So in terms of functionality, subclass B
should be a superset of superclass A
.
Example
Although in math, Square is a special case of Rectangle, letting Square
class inherit Rectangle
class violates Liskov Substitution Principle.
Square
cannot replace Rectangle
as its width and height are set together.