https://towardsdev.com/solid-principles-in-javascript-for-writing-clean-code-the-liskov-substitution-principle-973d4510a330