El asunto es así:
Básicamente una clase es serializable si dice que lo es. Si no dice que lo es, entonces no lo es. No se puede cambiar.
En todo caso, si en tu clase tienes algunos objetos que no son serializables, puedes hacer varias cosas. El resultado final va a ser que esos objetos no los serializas pero serializas el resto.
Lo más fácil, si quieres que un objeto contenido en tu clase no se serialice es declararlo como transient:
transient private Tipo miObjeto;
Así, cuando tu objeto contenedor se serialice, el campo miObjeto no se serializará. Ojo: se ignora completamente; que quiere decir que cuando se deserialice tu objeto, ese campo tampoco se cargará con nada. Tenlo en cuenta para que no ocurran problemas.
La otra posibilidad es (además de declararlo transient) que en lugar de dejar que te serialicen de forma estándar, se encargue tu propia clase de decir cómo debe ser serializada. Para eso implementa estos dos métodos en tu clase:
private void writeObject(ObjectOutputStream out) throws IOException;
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;
Se les llamará cuando se quiera escribir o leer, respectivamente, tu objeto. En esos momentos puedes aprovechar por ejemplo para inicializar lo que haga falta que no se deserialice. Es decir podrías hacer algo como:
private void readObject(ObjectInputStream in) throws IOException, ························ClassNotFoundException {
····in.defaultReadObject();
····miObjeto = new Tipo();
}
Si quieres saber más, lee http://java.sun.com/developer/technicalArticles/Programming/serialization/ o busca por ahí algún artículo sobre serialización en Java.