https://thevaluable.dev/guide-inheritance-oop/