: "Any method that uses references to the Base Class (Super Class) must be able to use objects of derived classes without knowing it"
Now lets think about it for a while.
You know everyone uses this day in and day out. You have a method that accepts an argument of Interface type, then at run time you hook up your object of actual class that implements the interface OR it accepts an argument of SuperClass type, and then you pass in the object of the derived type and all.
Lets take an example:
Now what is the first principle the above example breaks?
It is called Open-Closed Principle. i.e. doSomething method is not closed.
Code should be closed for modification, yet open for extension.
doSomething() should work with any object of type SuperClass or any derived type without even knowing about it.
But in the example above, Whenever a new subtype comes in the inheritance tree, one has to modify the existing code(doSomething method) and use ifs and elses and elseifs and nested if else elsifs.
Well you just violated LSP principle here. That is all LSP says.
Hope it helps.