If we start writing object-oriented code from scratch, we can take advantage of everything we learned in the previous chapters and all the features included in Java 9. As the requirements evolve, we will have to make changes to the interfaces and the classes to further generalize or specialize them, edit them, and create new ones. The fact that we started our project with an object-oriented approach will make it easy to make the necessary adjustments to the code.
Sometimes, we are extremely lucky and we have the chance to follow best practices as soon as we kick off a project. However, many other times we aren't so lucky and we have to work on projects that didn't follow best practices. In these cases, instead of following the same bad practices that generated error-prone, repetitive, and difficult-to-maintain code, we can use the features provided by our favorite IDE and additional helper tools to refactor existing...