Very nice topic
Small suggestion under inheritance. You may include
@Override` ensures that the compiler checks whether the method signature matches that of a method in the superclass. This helps catch errors where there might be typos in patent class method names