https://levelup.gitconnected.com/solid-principles-liskov-substitution-principle-lsp-part-3-76b4168a4953