https://medium.com/@harikumarjogi333/understanding-basic-object-oriented-programming-in-java-7274379c8529