https://medium.com/@jayram_manale/abstract-classes-in-java-unlocking-the-power-of-object-oriented-design-d5e7eb18ac87