https://medium.com/@TechiesSpot/exploring-advanced-object-oriented-programming-oop-concepts-in-java-b0b394e1c187