Suresh,
Immutability has nothing to do with being able to subclass a class. These two are totally different things.
Immutable means
the contents cannot be changed once the class is instantiated and initialized with some value. For example, when you create an instance of <code>Double</code> with a value 2.3, you will not be able to make it hold another value, say 5.7. It is like putting something into a box and sealing it. The box remains sealed with the original content. There is no way you can re-open it and put something else inside. That is immutability.
Extensibility or subclassing is a different thing altogether. When a class is declared final, it means you will have to feel satisfied with its current implementation and use it as it is. By no means you will be able to specialize the class by subclassing and add desired behaviour to it. When someone designed the class he felt good about the initial design and thought
it may not be necessary for somone to extend it. Hence it was made final
A final class may be mutable and my favourite example is the <code>StringBuffer</code> class. You cannot extend the <code>StringBuffer</code> class but you can change the contents of a <code>StringBuffer</code> instance any number of times after it is created.
Hope that helps,
Ajith