https://medium.com/@code.n.program.101/object-oriented-programming-with-java-polymorphism-4c403b599154