My thoughts on this:
Removing final in the class will not cause immediate problems. But consider the following:
There was the last class called AdamsFactory, which you go into is not final. Two months later, a new programmer named Dilbert joins your team.
It subclasses your class used for the final class in ScottFactory, but violates the Liskov Substitutability principle.
Then it has a ComicStripPrinter class that uses ScottFactory instead of AdamsFactory. Something will definitely break.
Which brings us back to what Joshua Block says:
If you intend to inherit: create it with a discussion and write it down. If you do not intend to inherit, then do not allow it.
I hope that what I said was not a big load.
EDIT:
Go to the introduction of the Java Langauge specification and find Joshua Bloch :)
jrharshath
source share