These are Java variations on the shapes example. The subdirectory ClassOriented is Rathman/Weirich's reference solution. The subdirectory InterfaceOriented avoids class inheritance at all costs. The subdirectory Mixed uses both class inheritance and interface polymorphism.