willitscript.com
 

Final should be Default for Classes in Java

David J. Pearce wrote an interesting post on why classes should always be final by default, unless otherwise defined. The argument goes like this: non final classes can be extended, and thus rely on their parent class. You can also override methods in the parent class and change their behavior, something that may come back to bite you later (when the parent class change. You risk introducing complexity and dependencies in your application.

Since what you want is to keep the code as clean and simple as possible you want to favor composition over inheritance. Having all classes final by default forces development in that direction, and introduces an obstacle in taking the easy road (that is, use inheritance way to much).