Inheritance looks safe until a subclass quietly breaks what callers expect, like a Square that changes area when you set the width. LSP says any subtype must work wherever its parent is expected. Check it whenever you are about to write extends, or when an override throws "not supported" or callers start checking instanceof. If the subtype cannot keep the parent's promises, change the hierarchy or use composition instead.