https://medium.com/javarevisited/what-is-the-diamond-problem-in-java-and-how-does-it-handle-it-cdfb1065dba0