https://medium.com/@alexandragrosu03/mastering-java-unlocking-the-potential-of-object-oriented-programming-b180a6a2fc5e