You don’t need that mindset anymore. My view is you can always add something, but you can’t take it away. Make it final. If somebody really needs to subclass it, they will call you. Listen to their argument. Find out if it’s legitimate. If it is, in the next release you can take out the final. In terms of binary compatibility, it is not something that you have to live with forever. You can take something that was final and make it non-final. If you had no public constructors, you can add a public constructor. Or if you actually labeled the class final, you can remove the access modifier. If you look at the binary compatibility chapter of the JLS (Chapter 13), you will see that you have not hurt binary compatibility by adding extendibility in a later release.